我正在使用argparse
解析我的Python程序的参数,我希望格式如下:
argparse
此参数不应再有其他值,但只能是一个。因此最多两个值。
我还想为第一个值program --arg1 val1 val2
提供默认值,以便在缺少该值时使用默认值。
例如,这些命令应该可以正常工作:
val1
这些命令将产生错误:
program --arg1 a b
# val1 = a
# val2 = b
program --arg1 a
# val1 = DEFAULT
# val2 = a
为此,库中提供了两个参数program --arg1
program --arg1 a b c
和nargs。
default支持nargs
,N
,+
,*
和?
。但是这些都不对我有用,因为argparse.REMAINDER
期望恰好有N个参数,如果我只给它一个,N
就会抛出错误。其余的都不满足要求。
[nargs=2
自变量仅适用于default
等于nargs
或?
的位置自变量。我该如何实现?
*
并不支持所有可能的约定。最简单的操作是使用argparse
,并对结果值进行后处理。
nargs='+'
注意,仅当完全不指定p = ArgumentParser()
p.add_argument("--arg1", nargs='+')
args = p.parse_args()
if args.arg1 is not None:
if len(args.arg1) == 1:
val1 = DEFAULT
val2 = args.arg1[0]
elif len(args.arg1) == 2:
val1, val1 = args.arg1
else:
raise ArgumentTypeError("--arg1 requires 1 or 2 arguments")
时,才使用default
的add_argument
参数。在上面,我假设默认值为--arg1
;如果需要,请调整None
的检查。
我建议您自己解析一个参数,例如使用逗号或冒号将两个值分开。
args.arg1
或如果不使用def one_or_two(s):
values = s.split(",") # or s.split(":"), etc
if len(values) == 1:
values.insert(0, "DEFAULT")
return values[:2]
p.add_argument("--arg1", type=one_or_two)
args = p.parse_args()
if args.arg1 is not None:
val1, val2 = args.arg1
,则完全使用第二个选项。
--arg1