【问题标题】:Argparse using optional argument with value in conjunction with positional argumentArgparse 使用带有值的可选参数和位置参数
【发布时间】:2015-11-07 16:38:26
【问题描述】:

在我的脚本中,为简单起见,我有三个参数:

parser.add_argument("-c", "--compile")
parser.add_argument("--verbose", 
                    help = "stores compilation results in specified log file as they come (default name: %(const)s)", 
                    nargs = '?', 
                    const = DEFAULT_LOG_FILE_NAME, 
                    metavar = "LOGFILE_NAME")
parser.add_argument("path", nargs = "*")

-c--verbose 都是可选的,路径也是一个位置参数。此外, --verbose 的参数也是可选的。如果没有提供,

假设我想将这三个组合在一个命令中。

我会按如下方式运行它:

myscript.py -c --verbose path1 path2 path3

这里的问题是,在这种情况下,脚本会将path1 解释为--verbose 的参数,除非我使用--verbose=<log_name>。据我所知,没有办法将 argparse 限制为只允许 = 语法而不是空格。我不能指望我的用户理解必须使用=,或者将--verbose 作为最后的参数之一。

我将如何解决这个问题?任何帮助表示赞赏。

【问题讨论】:

  • 您可以使用-- 来表示可选参数的结束;以下所有内容都被解释为位置参数。
  • @MartijnPieters,是的,我读到过。但是,我将如何对我的用户强制执行此操作?它没有反映在帮助文本中。我需要把它放在帮助顶部的使用文本中吗?
  • 在这种情况下,您将重载--verbose 来做两件事:作为开/关标志,以及作为日志文件选项。考虑将其分成两个不同的选项:--verbose--log=LOGFILE_NAME
  • 确实不太理想。我会添加一个 separate 选项来捕获日志文件:--verbose --log=....
  • @HaiVu:是的,这确实是一个很好的解决方案。考虑添加一个答案以便我接受。

标签: python argparse


【解决方案1】:

在这种情况下,您要重载 --verbose 来做两件事:作为开/关标志,以及作为日志文件选项。考虑将其分成两个不同的选项:--verbose--log=LOGFILE_NAME

【讨论】:

    猜你喜欢
    • 2019-04-13
    • 2013-01-28
    • 2017-02-23
    • 2011-05-27
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多