2016-02-18 40 views
0

我试图解析这样如何使用python argparse解析可选参数?

CMD {命令[COMMAND_OPTS]}

cmd a {1,2} 

cmd b 

cmd c 

其中的命令{A,B,C},当指令为 “a” 的命令行,有可能是“a”的COMMAND_OPTS(选项),例如{1,2},b或c将不会有任何参数。 这里是我的尝试:

import argparse 

if __name__ == "__main__": 
parser = argparse.ArgumentParser() 
parser.add_argument('-cmd', nargs = '+', choices = ['a', 'b', 'c']) 
# sub_parser = parser.add_subparsers() 
# parse_a = sub_parser.add_parser('a') 
# parser_a.add_argument("a", default = "1", choices = ["1", "2"]) 
args = parser.parse_args() 
if args.cmd: 
    print args.cmd 

如何使用Python Argparse解析呢?这似乎子分析器不适用于这个问题..

感谢,

+1

请提供[极小,完整,可验证的示例](http://stackoverflow.com/help/mcve)您所遇到的问题。你需要尝试自己解决这个问题,这样我们才能调试。否则,您可能需要聘请某人为您完成这项工作。 –

+0

谢谢你的提示,我编辑了我的问题。 – Felix

回答

3

把所有的命令在subparsers

parser = argparse.ArgumentParser() 
sub_parser = parser.add_subparsers(dest='cmd') 
parser_a = sub_parser.add_parser('a') 
parser_a.add_argument("a", choices = ["1", "2"]) 
parser_b = sub_parser.add_parser('b') 
parser_c = sub_parser.add_parser('c') 
args = parser.parse_args() 

args.cmd应该最终会被的a,b,c之一。并且如果给出a应该具有值为'1''2'args.a属性。该参数是必需的,因此指定默认值没有意义。

从交互式ipython壳:

In [13]: parser.parse_args(['b']) 
Out[13]: Namespace(cmd='b') 
In [14]: parser.parse_args(['c']) 
Out[14]: Namespace(cmd='c') 
In [15]: parser.parse_args(['a','1']) 
Out[15]: Namespace(a='1', cmd='a') 
相关问题