Модуль argparse
позволяет легко писать удобные интерфейсы командной строки. Программа определяет, какие аргументы ей требуются, а argparse
выяснит, как их разобрать из вывода функции sys.argv
.
Модуль argparse
также автоматически генерирует сообщения справки и использования, а так же выдает ошибки, когда пользователи передают программе недопустимые аргументы.
Обратите внимание, что есть еще два модуля, которые выполняют ту же задачу, а именно это модуль getopt
- эквивалент функции getopt()
из языка C и устаревший модуль optparse
. Обратите также внимание, что модуль argparse
основан на optparse
и поэтому очень похож с точки зрения использования.
Примечание.
- Рекомендуем посмотреть в сторону стороннего модуля
click
. Это пакет Python для создания красивых интерфейсов командной строки компонуемым способом с минимальным количеством кода, насколько это возможно.- Также, для быстрого создания утилит командной строки из имеющихся функций можно использовать сторонний модуль
fire
.
Первым шагом в использовании модуля argparse
является получение объекта ArgumentParser
путем создания экземпляра класса argparse.ArgumentParser()
:
>>> parser = argparse.ArgumentParser(description='Process some integers.')
Объект ArgumentParser
будет содержать всю информацию, необходимую для синтаксического анализа командной строки на типы данных Python.
Заполнение объекта ArgumentParser
информацией об аргументах программы осуществляется путем вызова метода parser.add_argument()
. Как правило, эти вызовы говорят ArgumentParser
, как взять строки из командной строки и превратить их в объекты. Эта информация хранится и используется при вызове метода parser.parse_args()
.
Например:
>>> parser.add_argument('integers', metavar='N', type=int, nargs='+', ... help='an integer for the accumulator') >>> parser.add_argument('--sum', dest='accumulate', action='store_const', ... const=sum, default=max, ... help='sum the integers (default: find the max)')
Позже, вызов метода parser.parse_args()
вернет объект с двумя атрибутами: integers
и accumulate
. Атрибут integers
будет представлять собой список из одного или нескольких int
, а атрибут accumulate
будет либо функцией sum()
, если в командной строке указан параметр --sum
, либо функцией max()
, если это не так.
Объект ArgumentParser
анализирует аргументы с помощью метода parser.parse_args()
. Это позволит проверить командную строку на ошибки, преобразовать каждый аргумент в соответствующий тип и затем вызвать соответствующее действие.
В большинстве случаев это означает, что простой объект пространства имен будет создан из атрибутов, проанализированных из командной строки:
>>> parser.parse_args(['--sum', '7', '-1', '42']) # Namespace(accumulate=<built-in function sum>, integers=[7, -1, 42])
В сценарии метод parser.parse_args()
обычно вызывается без аргументов, а объект ArgumentParser
автоматически определяет аргументы командной строки из функции sys.argv
.
argparse
:Следующий код представляет собой программу Python, которая читает список целых чисел из командной строки и производит либо сумму, либо вычисляет максимум:
# prog.py import argparse parser = argparse.ArgumentParser(description='Process some integers.') parser.add_argument('integers', metavar='N', type=int, nargs='+', help='an integer for the accumulator') parser.add_argument('--sum', dest='accumulate', action='store_const', const=sum, default=max, help='sum the integers (default: find the max)') args = parser.parse_args() print(args.accumulate(args.integers))
Предположим, что приведенный выше код Python сохранен в файл с именем prog.py
и может быть запущен в командной строке и предоставляет полезные справочные сообщения:
$ python3 prog.py -h usage: prog.py [-h] [--sum] N [N ...] Process some integers. positional arguments: N an integer for the accumulator optional arguments: -h, --help show this help message and exit --sum sum the integers (default: find the max)
При запуске с соответствующими аргументами он выводит либо сумму, либо максимум целых чисел, прочитанных из командной строки:
$ python3 prog.py 1 2 3 4 4 $ python prog.py 1 2 3 4 --sum 10
Если будут переданы недопустимые аргументы, то программа выдаст ошибку:
$ python3 prog.py a b c usage: prog.py [-h] [--sum] N [N ...] prog.py: error: argument N: invalid int value: 'a'