Сообщить об ошибке.

Метод add_mutually_exclusive_group() объекта ArgumentParser в Python

Взаимоисключающая группа параметров командной строки

Синтаксис:

import argparse

parser = argparse.ArgumentParser()
group = parser.add_mutually_exclusive_group(required=False)
group.add_argument(...)
...

Параметры:

  • required=False -

Описание:

Метод add_mutually_exclusive_group() объекта ArgumentParser создает взаимоисключающую группу параметров командной строки.

Модуль argparse будет следить за тем, чтобы в командной строке присутствовал только один из параметров взаимоисключающей группы:

>>> parser = argparse.ArgumentParser(prog='PROG')
>>> group = parser.add_mutually_exclusive_group()
>>> group.add_argument('--foo', action='store_true')
>>> group.add_argument('--bar', action='store_false')
>>> parser.parse_args(['--foo'])
# Namespace(bar=True, foo=True)
>>> parser.parse_args(['--bar'])
# Namespace(bar=False, foo=False)
>>> parser.parse_args(['--foo', '--bar'])
# usage: PROG [-h] [--foo | --bar]
# PROG: error: argument --bar: not allowed with argument --foo

Метод add_mutually_exclusive_group() также принимает аргумент required, который требует наличия хотя бы одного из взаимоисключающих параметров в командной строке:

>>> parser = argparse.ArgumentParser(prog='PROG')
>>> group = parser.add_mutually_exclusive_group(required=True)
>>> group.add_argument('--foo', action='store_true')
>>> group.add_argument('--bar', action='store_false')
>>> parser.parse_args([])
# usage: PROG [-h] (--foo | --bar)
# PROG: error: one of the arguments --foo --bar is required

Обратите внимание, что в настоящее время взаимоисключающие группы параметров не поддерживают аргументы title и descriptionкак метод add_argument_group().

Пример использования:

Программа возводит x в степень y, которые передаются в качестве параметров командной строки.

Демонстрация работы метода add_mutually_exclusive_group() в примере заключается в том, что в зависимости от параметров -v или -q будет производится длинный или короткий вывод результата. Наличие обоих параметров в командной строке вызывает конфликт параметров и будет выдана ошибка с соответствующим описанием.

# prog.py
import argparse

parser = argparse.ArgumentParser(description="calculate X to the power of Y")
group = parser.add_mutually_exclusive_group()
group.add_argument("-v", "--verbose", action="store_true")
group.add_argument("-q", "--quiet", action="store_true")
parser.add_argument("x", type=int, help="the base")
parser.add_argument("y", type=int, help="the exponent")
args = parser.parse_args()
answer = args.x**args.y

if args.quiet:
    print(answer)
elif args.verbose:
    print("{} to the power {} equals {}".format(args.x, args.y, answer))
else:
    print("{}^{} == {}".format(args.x, args.y, answer))

Смотрим как работает:

$ python3 prog.py 4 2
4^2 == 16
# короткий вывод
$ python3 prog.py 4 2 -q
16
# длинный вывод
$ python3 prog.py 4 2 -v
4 to the power 2 equals 16
# наличие обоих параметров
$ python3 prog.py 4 2 -vq
usage: prog.py [-h] [-v | -q] x y
prog.py: error: argument -q/--quiet: not allowed with argument -v/--verbose
$ python3 prog.py 4 2 -v --quiet
usage: prog.py [-h] [-v | -q] x y
prog.py: error: argument -q/--quiet: not allowed with argument -v/--verbose

Обратите внимание на запись [-v | -q] в тексте справки. Данная запись говорит нам, что можно использовать либо параметр -v, либо -q, но не оба одновременно:

Вывод справки программы:

$ python3 prog.py --help
usage: prog.py [-h] [-v | -q] x y

calculate X to the power of Y

positional arguments:
  x              the base
  y              the exponent

optional arguments:
  -h, --help     show this help message and exit
  -v, --verbose
  -q, --quiet