Модуль argparse

Модуль argparse в языке Python предоставляет инструменты для создания интерфейса командной строки. Он позволяет определить аргументы командной строки, их типы, значения по умолчанию, а также проводить парсинг и обработку этих аргументов.

  • argparse.ArgumentParser(): создает парсер аргументов командной строки.
  • parser.add_argument(): добавляет аргумент в парсер.
  • parser.parse_args(): выполняет парсинг аргументов командной строки и возвращает объект, содержащий значения аргументов.
  • arg.name: доступ к значению аргумента name.
  • argparse.Action: базовый класс для создания пользовательских действий при парсинге аргументов.
  • argparse.FileType: возвращает объект файла для аргумента, который является именем файла.
  • argparse.RawDescriptionHelpFormatter: форматтер для вывода справки, который сохраняет отступы и переносы строк.
  • argparse.ArgumentDefaultsHelpFormatter: форматтер для вывода справки, который добавляет значения по умолчанию аргументов.
  • argparse.ArgumentParser.add_argument_group(): создает группу аргументов.
  • argparse.Namespace: пространство имен, содержащее атрибуты со значениями аргументов.
  • argparse.REMAINDER: константа, используемая для захвата оставшихся аргументов.
  • argparse.ArgumentParser.print_help(): выводит справку по использованию аргументов.
  • argparse.ArgumentParser.error(): выводит сообщение об ошибке при парсинге аргументов.

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

import argparse

# Создание парсера аргументов
parser = argparse.ArgumentParser(description='Пример использования argparse')

# Добавление аргументов
parser.add_argument('-f', '--file', help='Имя файла', required=True)
parser.add_argument('-n', '--count', type=int, help='Количество', default=1)

# Парсинг аргументов
args = parser.parse_args()

# Доступ к значениям аргументов
filename = args.file
count = args.count

# Дальнейшая обработка аргументов...

Аргумент nargs.

Когда вам нужно обработать несколько значений для одного аргумента командной строки, вы можете использовать параметр nargs в методе add_argument модуля argparse.

Аргумент nargsопределяет, сколько аргументов должно быть принято для данного аргумента командной строки.

Примеры возможных значений nargs:

  • nargs="3" означает, что должно быть принято ровно три аргумента.
  • "?": Означает, что аргумент является необязательным и может быть указан или не указан. Если указан, то будет принят один аргумент.
  • "*": Означает, что аргумент может принять любое количество аргументов (в том числе и ноль).
  • "+": Означает, что аргумент должен принять одно или более аргументов.

Пример кода, демонстрирующий использование аргументов nargs:

import argparse

# Создание парсера аргументов
parser = argparse.ArgumentParser(description='Пример использования аргументов nargs')

# Добавление аргумента с nargs='+' для получения списка значений
parser.add_argument('files', nargs='+', help='Список файлов')

# Парсинг аргументов
args = parser.parse_args()

# Доступ к значению аргумента files (список файлов)
file_list = args.files

# Дальнейшая обработка списка файлов...

В этом примере мы добавляем аргумент files с параметром nargs='+', что означает, что этот аргумент ожидает получить одно или несколько значений из командной строки. Аргументы будут сохранены в виде списка значений.

После парсинга аргументов вы можете получить доступ к списку значений аргумента files, обратившись к атрибуту args.files. В примере мы сохраняем список файлов в переменной file_list для дальнейшей обработки.

Теперь вы можете передать несколько файлов через командную строку при запуске программы, например:

python script.py file1.txt file2.txt file3.txt

В результате аргумент files будет содержать список ['file1.txt', 'file2.txt', 'file3.txt'], и вы можете выполнять дополнительную логику обработки списка файлов в программе.

Аргумент action.

Параметр action в модуле argparse позволяет определить, как должны быть обработаны аргументы командной строки при парсинге. В зависимости от значения action, аргумент может иметь различное поведение. Вот некоторые из возможных значений для параметра action:

  • store (по умолчанию): Аргумент сохраняется в атрибуте с именем, указанным в dest.
  • store_const: Аргумент сохраняется в атрибуте с именем, указанным в dest, но используется предварительно определенное значение, указанное в const.
  • store_true/store_false: Аргумент принимает значение True или False, соответственно.
  • append: Аргументы с одним и тем же именем будут сохраняться в список.
  • count: Считает количество вхождений аргумента, не требуя значения.

Вот пример кода, демонстрирующий использование параметра action:


import argparse

# Создание парсера аргументов
parser = argparse.ArgumentParser(description='Пример использования аргумента action')

# Добавление аргумента с action='store_const' для сохранения предварительно определенного значения
parser.add_argument('--verbose', action='store_const', const=True, default=False, help='Включить подробный вывод')

# Добавление аргумента с action='append' для сохранения нескольких значений в список
parser.add_argument('--file', action='append', help='Указать файл для обработки')

# Добавление аргумента с action='count' для подсчета вхождений аргумента
parser.add_argument('--debug', action='count', default=0, help='Включить отладочный режим')

# Парсинг аргументов
args = parser.parse_args()

# Доступ к значениям аргументов
verbose_mode = args.verbose
file_list = args.file
debug_level = args.debug

# Дальнейшая обработка аргументов...
print(verbose_mode, file_list, debug_level)
python cmd.py --file name1.txt --file name2.txt --verbose --debug --debug

В этом примере мы добавляем несколько аргументов с разными значениями action. Аргумент --verbose использует action='store_const', что означает, что если этот аргумент указан в командной строке, то в атрибут verbose_mode будет сохранено значение True.

Аргумент --file использует action='append', что позволяет указывать этот аргумент несколько раз и сохранять все значения в список file_list. Например, --file file1.txt --file file2.txt приведет к тому, что file_list будет содержать ['file1.txt', 'file2.txt'].

Аргумент --debug использует action='count', что позволяет считать количество вхождений этого аргумента. Каждый раз, когда аргумент указывается, значение debug_level будет увеличиваться на 1. Например, --debug --debug приведет к тому, что debug_level будет равно 2.

Значения action позволяют настраивать поведение аргументов командной строки и гибко обрабатывать различные сценарии в вашей программе.

Аргумент type.

Использование аргумента type:

import argparse

# Создаем парсер аргументов
parser = argparse.ArgumentParser()
# Добавляем аргумент с типом int
parser.add_argument("--number", type=int, help="Enter a number")

# Разбираем аргументы командной строки
args = parser.parse_args()

# Получаем значение аргумента и выводим его
number = args.number
print("The number entered is:", number)

В приведенном коде мы создаем объект парсера argparse.ArgumentParser и добавляем аргумент --number с аргументом type=int. Это означает, что значение, переданное для аргумента --number, будет преобразовано в целое число перед тем, как будет доступно в переменной args.number.

После разбора аргументов командной строки, мы получаем значение args.number и выводим его на экран.

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

python script.py --number 42
The number entered is: 42

Аргумент choices.

Использование аргумента choices:

import argparse

# Создаем парсер аргументов
parser = argparse.ArgumentParser()
# Добавляем аргумент с выбором из заданных вариантов
parser.add_argument("--color", choices=["red", "green", "blue"], help="Choose a color")

# Разбираем аргументы командной строки
args = parser.parse_args()

# Получаем значение аргумента и выводим его
color = args.color
print("The chosen color is:", color)

В приведенном коде мы создаем объект парсера argparse.ArgumentParser и добавляем аргумент --color с аргументом choices=["red", "green", "blue"]. Это означает, что пользователь должен выбрать одно из заданных значений: "red", "green" или "blue". Если пользователь введет значение, не входящее в список выбора, будет выдано сообщение об ошибке.

После разбора аргументов командной строки мы получаем значение args.color и выводим его на экран.

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

$ python script.py --color green
The chosen color is: green
$ python script.py --color yellow
usage: script.py [-h] [--color {red,green,blue}]
script.py: error: argument --color: invalid choice: 'yellow' (choose from 'red', 'green', 'blue')

Во втором примере пользователь попытался выбрать цвет "yellow", который не является допустимым значением, и получилось сообщение об ошибке с вариантами выбора.