【问题标题】:python argparser for multiple arguments for partial choicespython argparse 用于部分选择的多个参数
【发布时间】:2013-08-01 10:37:31
【问题描述】:

我这样创建一个 argparser:

  parser = argparse.ArgumentParser(description='someDesc')
  parser.add_argument(-a,required=true,choices=[x,y,z])
  parser.add_argument( ... )

但是,仅对于选项“x”而不是选项“y,z”,我想要一个额外的 REQUIRED 参数。例如。

python test -a x       // not fine...needs additional MANDATORY argument b
python test -a y       // fine...will run
python test -a z       // fine...will run  
python test -a x -b "ccc"       // fine...will run 

如何使用 ArgumentParser 来实现这一点?我知道使用 bash optparser 是可能的

【问题讨论】:

    标签: python argparse


    【解决方案1】:

    详细说明子解析器方法:

    sp = parser.add_subparsers(dest='a')
    x = sp.add_parser('x')
    y=sp.add_parser('y')
    z=sp.add_parser('z')
    x.add_argument('-b', required=True)
    
    • 这与您的规范不同,因为不需要-a
    • dest='a' 参数确保命名空间中有一个“a”属性。
    • 通常不需要像“-b”这样的可选选项。子解析器“x”也可以采用所需的位置。

    如果您必须使用 -a 可选,两步解析可能会起作用

    p1 = argparse.ArgumentParser()
    p1.add_argument('-a',choices=['x','y','z'])
    p2 = argparse.ArgumentParser()
    p2.add_argument('-b',required=True)
    ns, rest = p1.parse_known_args()
    if ns.a == 'x':
        p2.parse_args(rest, ns)
    

    第三种方法是事后进行自己的测试。你仍然可以使用 argparse 错误机制

    parser.error('-b required with -a x')
    

    【讨论】:

      【解决方案2】:

      ArgumentParser 支持使用 add_subparsers() 方法。 add_subparsers() 方法通常是 不带参数调用并返回一个特殊的操作对象。这个 对象有一个方法,add_parser(),它接受一个命令名 和任何 ArgumentParser 构造函数参数,并返回一个 可以照常修改的 ArgumentParser 对象。

      ArgumentParser.add_subparsers()
      

      【讨论】:

        猜你喜欢
        • 2018-03-04
        • 2015-12-11
        • 2013-05-14
        • 2022-01-06
        • 2019-01-28
        • 2019-04-30
        • 2011-07-19
        • 2019-07-12
        • 2022-01-19
        相关资源
        最近更新 更多