我有一个程序需要有一个选项来测试服务器 ID 列表OR对服务器发出命令。这意味着,如果我发出--test
,那么不需要其他任何东西。它对每台服务器运行全部测试并打印结果。
但是,如果我不指定--test
,那么它应该需要一些选项,例如--id
and --command
.
但是,我不确定argparse
可以处理互斥组中所需的选项。代码(为简单起见进行了修改)如下。我已经修改了选项,所以如果您指定-a
,那么你应该可以开始了,不需要其他选择。
import argparse
parser = argparse.ArgumentParser()
test_or_not = parser.add_mutually_exclusive_group(required=True)
test_or_not.add_argument('-a', action='store_true')
or_not = test_or_not.add_argument_group()
target = or_not.add_mutually_exclusive_group(required=True)
target.add_argument('-b',action="store_true")
target.add_argument('-c',action="store_true")
target.add_argument('-d',action="store_true")
target.add_argument('-e',action="store_true")
group = or_not.add_mutually_exclusive_group(required=True)
group.add_argument('-f',action="store_true")
group.add_argument('-g',action="store_true")
or_not.add_argument('-i',action="store_true")
or_not.add_argument('-j',action="store_true")
or_not.add_argument('-k',action="store_true")
or_not.add_argument('-l',action="store_true")
args = parser.parse_args()
产生错误的原因是argparse
仍然需要单独的选项,即使它们位于相互排斥的组中。有没有办法argparse
可以容纳这组选项还是我需要在之外添加一些编程argparse
?
$ python3 ~/tmp/groups.py -a
usage: groups.py [-h] -a (-b | -c | -d | -e) (-f | -g) [-i] [-j] [-k] [-l]
groups.py: error: one of the arguments -b -c -d -e is required
编辑:我可以添加一个完全在外部工作的新选项argparse
如下,但我想保持它的结构argparse
如果可能的话。
import argparse
import sys
if '--test' in sys.argv:
go_do_testing()
sys.exit(0)
parser = argparse.ArgumentParser()
<snip>