使用 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 打印命令行参数?的主要内容,如果未能解决你的问题,请参考以下文章