Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用python argparse解析可选参数?_Python_Parsing_Argparse - Fatal编程技术网

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

如何使用python argparse解析可选参数?,python,parsing,argparse,Python,Parsing,Argparse,我正在尝试解析这样的命令行 cmd{command[command_OPTS]} cmd a {1,2} cmd b cmd c 在命令{a,b,c}中,当命令为“a”时,可能有一个命令_OPTS(choices)表示“a”,例如{1,2},b或c将没有任何参数。 以下是我尝试过的: import argparse if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument('-cmd

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

cmd{command[command_OPTS]}

cmd a {1,2}

cmd b

cmd c
在命令{a,b,c}中,当命令为“a”时,可能有一个命令_OPTS(choices)表示“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
is,则它应该有一个
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')

请提供您遇到的问题的详细信息。您需要自己尝试解决这个问题,这样我们就可以调试一些东西了。否则,你可能需要雇用一个人来为你做这项工作。谢谢你的提示,我编辑了我的问题。