目前,我正在写一个脚本,接受这样的空格分隔的参数
parser = argparse.ArgumentParser(description='foo 1.0')
parser.add_argument('-a', '--arch', help='specify the angle', nargs="+" choices=ch_list, required=True
我也通过了
+foo +bar +baz
或
-foo -bar -baz
或
foo bar baz
其中foo bar baz
是字母数字元素
排序参数的最优雅方式是什么?
如果参数混合发生,那么所有人都应该带有+
符号或-
符号或根本没有符号。
答案 0 :(得分:0)
1)您不能将-foo, -baz, -bar
中的任何一个作为值传递。连字符将使ArgParse将其解释为选项标志并产生错误。
2)
排序参数的最优雅方式是什么?
您可以拥有
ch_list = ['foo', 'bar', 'baz', '+foo', '+bar', '+baz']
这将确保该列表之外的内容均不被允许,但不会阻止用户输入不同格式的混合搭配,例如./program --arch foo +baz +bar
。
为防止这种情况,您需要在parse_args()
之后亲自验证参数。
args = parser.parse_args()
l = args.arch if args.arch is not None else []
if len(l):
has_plus = lambda x : x[0] == '+'
first_has_plus = has_plus(l[0])
for x in l:
if first_has_plus ^ has_plus(x):
print("INVALID")
return
print("PASSED")