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

How to parse optional arguments using python argparse?

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

cmd {命令[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 解析这个?似乎子解析器不是为这个问题而设计的..

谢谢,

将所有命令放入子解析器

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''2'。该参数是必需的,因此指定默认值没有意义。

来自互动 ipython shell:

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')