如何按值解析argparser参数

时间:2019-01-30 12:34:02

标签: 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

foo bar baz

其中foo bar baz是字母数字元素

排序参数的最优雅方式是什么?

如果参数混合发生,那么所有人都应该带有+符号或-符号或根本没有符号。

1 个答案:

答案 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")