Python 如何按值解析argparser参数
目前我正在编写一个脚本,它接受这样的空格分隔参数Python 如何按值解析argparser参数,python,argparse,Python,Argparse,目前我正在编写一个脚本,它接受这样的空格分隔参数 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是alphanum元素 最优雅的理清论点的方法是什么
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
是alphanum元素
最优雅的理清论点的方法是什么
要么all应该有+
符号,要么-
符号,要么根本没有符号,如果发生参数混合,脚本应该抛出错误并退出。1)您不能将-foo,-baz,-bar
中的任何一个作为值传递。连字符将使ArgParse将其解释为选项标志并抛出错误
(二)
最优雅的理清论点的方法是什么
你可以
ch_list = ['foo', 'bar', 'baz', '+foo', '+bar', '+baz']
这将确保列表之外的内容不被允许,但不会阻止用户输入不同格式的混合匹配,例如/program--arch foo+baz+bar
为了避免这种情况,您需要在parse_args()
之后自己验证参数
阅读
foo bar baz
ch_list = ['foo', 'bar', 'baz', '+foo', '+bar', '+baz']
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")