【发布时间】:2023-04-03 12:55:01
【问题描述】:
我正在使用argparse 来解析命令行参数。
为了帮助调试,我想print 一行,其中包含调用 Python 脚本的参数。在argparse 中是否有一种简单的方法可以做到这一点?
【问题讨论】:
标签: python python-2.7 argparse
我正在使用argparse 来解析命令行参数。
为了帮助调试,我想print 一行,其中包含调用 Python 脚本的参数。在argparse 中是否有一种简单的方法可以做到这一点?
【问题讨论】:
标签: python python-2.7 argparse
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() 需要强制参数,这将不起作用。在这种情况下有替代方案吗?
如果在另一个 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)
【讨论】:
print(' {} {}'.format(arg, getattr(args, arg) or '')) 与 getattr(args, arg) or '' 是您的版本的本质区别,以防止在未使用的可选参数的情况下打印“无”字样。跨度>
您可以通过调用vars(args) 以dict 的形式获取参数
然后就可以遍历dict的键值对了
args = parser.parse_args()
print(' '.join(f'{k}={v}' for k, v in vars(args).items()))
【讨论】: