Python-argparse需要或

Python-argparse需要或,python,Python,运行脚本时,必须传递-g或-s。对于下面的代码,它抛出以下错误,并将参数传递给它 {~/nsnitro}-> ./sg-arg.py status -g test.server usage: sg-arg.py [-h] (-g SERVICEGROUP | -s SERVICENAME) {status} ... sg-arg.py: error: one of the arguments -g/--servicegroup -s/--servicename is required 代

运行脚本时,必须传递
-g
-s
。对于下面的代码,它抛出以下错误,并将参数传递给它

{~/nsnitro}-> ./sg-arg.py status -g test.server
usage: sg-arg.py [-h] (-g SERVICEGROUP | -s SERVICENAME) {status} ...
sg-arg.py: error: one of the arguments -g/--servicegroup -s/--servicename is required
代码:


您将互斥组添加到错误的解析器。换句话说,对于您拥有的调用,正确的调用类似于
/sg-arg.py-g test.server status
(请注意,参数位于子parser声明之前)

要修复它,您需要将互斥组添加到子parser,并将参数添加到该组。这似乎有效:

import argparse
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers()

check = subparsers.add_parser('status')
check_mutex = check.add_mutually_exclusive_group(required=True)
check_mutex.add_argument('-g', '--servicegroup', action='store', help='servicegroup name')
check_mutex.add_argument('-s', '--servicename', action='store', help='service name')

args = parser.parse_args()
e、 g


看起来您正在将互斥组添加到主解析器,而不是子解析器。e、 g.
/sg-arg.py-g test.server status
在这种情况下应该是正确的调用。啊,我明白了,所以删除
type=servicegroup\u status
会破坏代码。实际上,我正在调用一个名为
servicegroup\u status
的函数并传入参数。脚本运行正常,但函数没有被调用。好的,我收回它,函数被执行,但当我添加
type=function\u NAME
sg-arg.py状态:错误:参数之一-g/--servicegroup-s/--servicename是必需的
import argparse
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers()

check = subparsers.add_parser('status')
check_mutex = check.add_mutually_exclusive_group(required=True)
check_mutex.add_argument('-g', '--servicegroup', action='store', help='servicegroup name')
check_mutex.add_argument('-s', '--servicename', action='store', help='service name')

args = parser.parse_args()
$ python foo.py status -g test.server
$ python foo.py status -s test.server
$ python foo.py status  test.server
usage: foo.py status [-h] (-g SERVICEGROUP | -s SERVICENAME)
foo.py status: error: one of the arguments -g/--servicegroup -s/--servicename is required