【发布时间】: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:是的,这确实是一个很好的解决方案。考虑添加一个答案以便我接受。