Python - argparse需要或者

时间:2015-04-14 16:08:11

标签: 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

代码:

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

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

args = parser.parse_args()

1 个答案:

答案 0 :(得分:1)

您将互斥组添加到错误的解析器中。换句话说,通过您的调用,正确的调用将类似于./sg-arg.py -g test.server status(注意参数在 subparser声明之前)。

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

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。

$ 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