使用 argparse 打印命令行参数?

Posted

技术标签:

【中文标题】使用 argparse 打印命令行参数?【英文标题】:Print command line arguments with argparse? 【发布时间】:2016-05-01 18:11:20 【问题描述】:

我正在使用argparse 来解析命令行参数。

为了帮助调试,我想print 一行,其中包含调用 Python 脚本的参数。在argparse 中是否有一种简单的方法可以做到这一点?

【问题讨论】:

【参考方案1】:

ArgumentParser.parse_args 默认情况下仅从sys.argv 获取参数。因此,如果您不更改该行为(通过将其他内容传递给 parse_args),您可以简单地打印 sys.argv 以获取传递给 Python 脚本的所有参数:

import sys
print(sys.argv)

或者,您也可以只打印parse_args 返回的命名空间;这样您就可以按照参数解析器解释它们的方式获取所有值:

args = parser.parse_args()
print(args)

【讨论】:

如果parser.parse_args() 需要强制参数,这将不起作用。在这种情况下有替代方案吗?【参考方案2】:

如果在另一个 python 脚本中运行 argparse(例如在 unittest 中),则打印 sys.argv 只会打印主脚本的参数,例如:

['C:\eclipse\plugins\org.python.pydev_5.9.2.201708151115\pysrc\runfiles.py', 'C:\eclipse_workspace\test_file_search.py​​', '--port', '58454', '--verbosity', '0']

在这种情况下,您应该使用 vars 来迭代 argparse args:

parser = argparse.ArgumentParser(...
...
args = parser.parse_args()
for arg in vars(args):
    print arg, getattr(args, arg)

感谢:https://***.com/a/27181165/658497

【讨论】:

我会使用如下的打印调用 print(' '.format(arg, getattr(args, arg) or ''))getattr(args, arg) or '' 是您的版本的本质区别,以防止在未使用的可选参数的情况下打印“无”字样。跨度> 【参考方案3】:

您可以通过调用vars(args)dict 的形式获取参数 然后就可以遍历dict的键值对了

args = parser.parse_args()
print(' '.join(f'k=v' for k, v in vars(args).items()))

【讨论】:

以上是关于使用 argparse 打印命令行参数?的主要内容,如果未能解决你的问题,请参考以下文章

调试时模拟 argparse 命令行参数输入

如何使用 2 个位置参数在 argparse 上打印帮助界面?

Python 处理脚本的命令行参数:使用argparse

Python命令行参数处理之argparse模块

python中的argparse包——用于解析命令行参数

python 命令行参数——argparse模块的使用