【问题标题】:Print command line arguments with argparse?使用 argparse 打印命令行参数?
【发布时间】:2023-04-03 12:55:01
【问题描述】:

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

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

【问题讨论】:

    标签: python python-2.7 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://stackoverflow.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()))
    

    【讨论】:

      猜你喜欢
      • 2021-03-12
      • 2016-05-02
      • 2013-09-13
      • 1970-01-01
      • 2020-05-05
      • 2016-05-01
      • 2012-03-19
      • 2023-04-03
      相关资源
      最近更新 更多