Python Argparse: использовать две группы обязательных аргументов - PullRequest
0 голосов
/ 05 февраля 2019

У меня есть программа на Python, которая может принимать аргументы в двух режимах:

ИЛИ (a) ИЛИ (b И c И d).

Я смотрел на add_mutually_exclusive_group, но он не позволяет иметь одну подгруппу со списком необходимых аргументов

Есть идеи?

1 Ответ

0 голосов
/ 21 февраля 2019

Для второго режима требуется 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
...