Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.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_Argparse - Fatal编程技术网

Python argparse参数嵌套

Python argparse参数嵌套,python,argparse,Python,Argparse,我有以下python代码: parser = argparse.ArgumentParser(description='Deployment tool') group = parser.add_mutually_exclusive_group() group.add_argument('-a', '--add', dest='name_to_add', help='Add a new group or a role to existing group') group.add_argument('

我有以下python代码:

parser = argparse.ArgumentParser(description='Deployment tool')
group = parser.add_mutually_exclusive_group()
group.add_argument('-a', '--add', dest='name_to_add', help='Add a new group or a role to existing group')
group.add_argument('-u', '--upgrade', dest='name_to_upgrade', help='Upgrade a group with the new version')
parser.add_argument('--web_port', help='Port of the WEB instance that is being added to the group')
我的问题是“-web_-port”选项。我希望能够添加此选项,仅使用“-a”选项,而不使用“-u”

希望能够运行:“python my_script.py-a name--web_port=XXXX”

我不想运行:“python my_script.py-u name--web_port=XXXX”

我应该如何更改代码才能以这种方式运行它


谢谢,Arshavski Alexander。

您可以将
-a
-u
作为选项,而不是将它们设置为子命令。然后,使
--web端口成为
add
子命令的一个选项:

python my_script.py add name --web_port=XXXX
python my_script.py upgrade name
比如:

parser = argparse.ArgumentParser(description='Deployment tool')
subparsers = parser.add_subparsers()

add_p = subparsers.add_parser('add')
add_p.add_argument("name")
add_p.add_argument("--web_port")
...

upg_p = subparsers.add_parser('upgrade')
upg_p.add_argument("name")
...
如果你试着跑

my_script.py upgrade name --web_port=1234
对于无法识别的参数--“web\u端口”,您将得到一个错误

同样,如果你尝试

my_script.py add name upgrade
无法识别的参数“upgrade”将出现错误,因为 您仅为“add”子命令定义了一个位置参数

换句话说,子命令是隐式互斥的。唯一的 一个小小的缺点是,您需要将“name”位置参数添加到每个
subparser.

可能重复感谢您的快速响应。但我需要添加和升级,使之相互排斥。作为子命令,它们应该是<例如,code>python my_script.py add name--web_port=XXX upgrade
upgrade
视为
add
子命令的位置参数,而不是
upgrade
子命令的调用。(我想,我有一段时间没有实现子命令了。)非常感谢。这就是我需要的。