首页 > 解决方案 > 如何按值解析 argparser 参数

问题描述

目前我正在编写接受这样的空格分隔参数的脚本

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字母元素在哪里

整理论点最优雅的方法是什么?

如果参数混合发生,脚本应该抛出错误并退出+-

标签: pythonargparse

解决方案


1)您不能传递任何-foo, -baz, -bar值。连字符将使 ArgParse 将其解释为选项标志并抛出错误。

2)

整理论点最优雅的方法是什么?

你可以有

ch_list = ['foo', 'bar', 'baz', '+foo', '+bar', '+baz'] 

这将确保该列表之外的任何内容都被允许,但它不会阻止用户输入不同格式的混合和匹配 say ./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")

推荐阅读