2016-02-18 41 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') 
相關問題