【问题标题】:Optional Command Line Parameter in PythonPython 中的可选命令行参数
【发布时间】:2012-03-08 05:23:54
【问题描述】:

我正在尝试检索 Python 脚本(Windows 下为 2.7)的可选命令行参数,但事情进展不顺利。代码是:

parser = argparse.ArgumentParser(description = 'Process display arguments')
parser.add_argument('-t', nargs = '?', default = 'baz')
args = parser.parse_args(['-t'])
print args.t

如果我在没有参数的情况下运行“program.py”,args.t 将打印为 None。 如果我运行“program.py -t”,args.t 将打印为 None。 如果我运行“program.py -t foo”,args.t 将打印为 None。

为什么我没有从命令行获取值到 args.t 中?

【问题讨论】:

    标签: python command-line-arguments argparse


    【解决方案1】:

    不要将['-t'] 传递给 parse_args。做吧:

    args = parser.parse_args()
    

    您传递给 parse_args 的任何参数都将用于代替您的命令行。所以有了这个参数,你使用什么命令行都没有关系,argparse 永远不会看到它。

    【讨论】:

    • “-h”现在也可以正常工作了!当示例从“print parser.parse_args(['-t']”移动到在脚本中实际使用它时,我想我感到困惑。
    【解决方案2】:

    线

    args = parser.parse_args(["-t"])
    

    将命令行参数 ["-t"] 传递给解析器。您想使用实际的命令行参数,因此将行更改为

    args = parser.parse_args()
    

    【讨论】:

      【解决方案3】:

      使用const keyword argument

      import argparse
      parser = argparse.ArgumentParser(description = 'Process display arguments')
      parser.add_argument('-t', nargs = '?', const = 'baz', default = 'baz')
      args = parser.parse_args()
      print args.t
      

      运行它会产生:

      % test.py          # handled by `default`
      baz
      % test.py -t       # handled by `const`
      baz
      % test.py -t blah
      blah
      

      【讨论】:

      • 文档中对此进行了解释:请注意,对于可选参数,还有一种情况 - 存在选项字符串但后面没有命令行参数。在这种情况下,将产生来自 const 的值。
      猜你喜欢
      • 2015-07-05
      • 1970-01-01
      • 2012-10-06
      • 2017-04-04
      • 2020-05-04
      • 2014-08-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多