我有一个可以在两种模式下接受参数的python程序:
(a)或(b AND c AND d)。
我看过add_mutually_exclusive_group
,但不允许有一个带有必选参数列表的子组
有什么想法吗?
答案 0 :(得分:0)
您可以使第二种模式需要3个参数,如下所示:
import argparse
parser = argparse.ArgumentParser()
group = parser.add_mutually_exclusive_group(required=True)
group.add_argument(
'--mode1',
metavar='A',
)
group.add_argument(
'--mode2',
nargs=3,
metavar=('B', 'C', 'D'),
)
args = parser.parse_args()
print(args)
示例输出:
$ ./test.py -h
usage: test.py [-h] (--mode1 A | --mode2 B C D)
optional arguments:
-h, --help show this help message and exit
--mode1 A
--mode2 B C D
$
$ # Valid arguments
$ ./test.py --mode1 foo
Namespace(mode1='foo', mode2=None)
$ ./test.py --mode2 foo bar baz
Namespace(mode1=None, mode2=['foo', 'bar', 'baz'])
$
$ # Invalid arguments
$ ./test.py --mode1 foo bar
usage: test.py [-h] (--mode1 A | --mode2 B C D)
test.py: error: unrecognized arguments: bar
$ ./test.py --mode2 foo bar
usage: test.py [-h] (--mode1 A | --mode2 B C D)
test.py: error: argument --mode2: expected 3 argument(s)
$ ./test.py
usage: test.py [-h] (--mode1 A | --mode2 B C D)
test.py: error: one of the arguments --mode1 --mode2 is required