如何使用python argparse解析可选参数?

时间:2016-02-18 15:55:18

标签: python parsing argparse

我正在尝试解析像这样的命令行

cmd {command [COMMAND_OPTS]}

cmd a {1,2}

cmd b

cmd c

在命令{a,b,c}中,当命令是" a"时,可能有一个COMMAND_OPTS(选项)用于" a",比如{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解析这个?似乎subparser不适合这个问题..

谢谢,

1 个答案:

答案 0 :(得分:3)

将所有命令放在子分析器

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,则应该具有值为args.a'1'的{​​{1}}属性。该参数是必需的,因此指定默认值是没有意义的。

来自交互式'2' shell:

ipython