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