为简单起见,在我的脚本中,我有三个参数:
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
作为最后一个参数之一。我该如何解决?任何帮助表示赞赏。
最佳答案
在这种情况下,您要超载--verbose做两件事:作为开/关标志和作为日志文件选项。考虑将其分为两个不同的选项:--verbose
和--log=LOGFILE_NAME