我正在尝试解析这样的命令行
cmd {命令 [COMMAND_OPTS]}
cmd a {1,2}
cmd b
cmd c
命令{a,b,c}中,当命令为“a”时,“a”可能有COMMAND_OPTS(choices),比如{1,2},b或c不会有任何COMMAND_OPTS(choices)论据。 这是我尝试过的:
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
,则应具有值为 '1'
或 '2'
的 args.a
属性。该参数是必需的,因此指定默认值没有意义。
从交互式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')
关于python - 如何使用 python argparse 解析可选参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35486227/