Argparse 结合位置参数使用带值的可选参数
Argparse using optional argument with value in conjunction with positional argument
在我的脚本中,为简单起见,我有三个参数:
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 的参数也是可选的。如果提供 none,则
假设我想将这三个组合在一个命令中。
我会 运行 如下:
myscript.py -c --verbose path1 path2 path3
这里的问题是,在这种情况下,脚本会将 path1
解释为 --verbose
的参数,除非我使用 --verbose=<log_name>
。据我所知,没有办法将 argparse 限制为只允许 =
语法而不是 space。我不能指望我的用户理解必须使用 =
,或者将 --verbose
作为最后一个参数之一。
我该如何解决这个问题?感谢您的帮助。
在这种情况下,您要重载 --verbose 来做两件事:作为 on/off 标志,以及作为日志文件选项。考虑将其分为两个不同的选项:--verbose
和 --log=LOGFILE_NAME
在我的脚本中,为简单起见,我有三个参数:
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 的参数也是可选的。如果提供 none,则
假设我想将这三个组合在一个命令中。
我会 运行 如下:
myscript.py -c --verbose path1 path2 path3
这里的问题是,在这种情况下,脚本会将 path1
解释为 --verbose
的参数,除非我使用 --verbose=<log_name>
。据我所知,没有办法将 argparse 限制为只允许 =
语法而不是 space。我不能指望我的用户理解必须使用 =
,或者将 --verbose
作为最后一个参数之一。
我该如何解决这个问题?感谢您的帮助。
在这种情况下,您要重载 --verbose 来做两件事:作为 on/off 标志,以及作为日志文件选项。考虑将其分为两个不同的选项:--verbose
和 --log=LOGFILE_NAME