Введение

В этом блоге мы рассмотрим различные способы использования модуля argparse в Python для обработки аргументов командной строки в ваших программах.

Если вы когда-либо писали интерфейс командной строки (CLI) на Python, вы знаете, что синтаксический анализ и обработка аргументов командной строки может быть утомительной и подверженной ошибкам задачей. К счастью, модуль argparse в стандартной библиотеке Python предоставляет простой и мощный способ справиться с этой задачей.

В этом блоге мы рассмотрим все, что вам нужно знать об argparse, от основ определения и разбора аргументов командной строки до продвинутых методов обработки более сложных сценариев. К концу этого блога у вас будет полное представление об argparse, а также знания и навыки, необходимые для его эффективного использования в ваших собственных программах.

Итак, приступим!

Начало работы с argparse

Чтобы использовать модуль argparse в вашей программе Python, вам сначала нужно будет импортировать его аналогично другим пакетам Python, то есть import argparse. После того, как вы импортировали argparse, вы можете определить аргументы командной строки, которые ваша программа будет принимать, используя объект ArgumentParser. Этот объект предоставляет удобный способ указать аргументы, которые будет принимать ваша программа, а также любые дополнительные параметры или функции, которые вы хотите включить.

Например, вот как можно определить простой объект ArgumentParser, который принимает один обязательный аргумент командной строки:

В этом примере filename — это имя аргумента командной строки, а 'The name of the file to process' — это краткое описание, которое будет отображаться пользователю при запуске программы с флагом -h или --help.

Чтобы проанализировать аргументы командной строки, переданные вашей программе, вы можете использовать метод parse_args() объекта ArgumentParser. Это проанализирует аргументы командной строки и вернет объект Namespace, содержащий значения аргументов. В этом примере объект args будет иметь атрибут filename, содержащий значение аргумента filename, переданного программе.

Расширенные методы анализа аргументов

До сих пор мы рассмотрели основы использования argparse для определения и анализа аргументов командной строки в ваших программах Python. Однако argparse — это мощный и гибкий модуль, который также можно использовать для обработки широкого спектра более сложных сценариев.

Одной из дополнительных функций argparse является возможность указать количество аргументов, которые должна принимать опция командной строки, с помощью параметра nargs. Например, вы можете использовать nargs='+', чтобы указать, что параметр должен принимать один или несколько аргументов, или nargs='?', чтобы указать, что параметр является необязательным и должен принимать ноль или один аргумент.

Вот пример того, как вы можете использовать параметр nargs для определения параметра командной строки, который принимает одно или несколько имен файлов:

В этом примере опция -f или --files примет одно или несколько имен файлов, которые будут сохранены в списке в атрибуте files объекта Namespace, возвращаемого parse_args().

Еще одна расширенная функция argparse — возможность указывать значения по умолчанию для параметров. Это может быть полезно, если вы хотите задать поведение по умолчанию для параметра, если он не указан в командной строке. Например, вы можете использовать параметр default, чтобы указать значение по умолчанию для опции:

В этом примере параметр -o или --output по умолчанию будет равен 'output.txt', если он не указан в командной строке.

Сложный пример

import argparse 
parser = argparse.ArgumentParser(prog='myprogram', description='Process some files') 

# Required arguments 
parser.add_argument('input', help='The input file') 
parser.add_argument('output', help='The output file') 

# Optional arguments 
parser.add_argument('-v', ' - verbose', action='store_true', help='Enable verbose output')
parser.add_argument('-o', ' - overwrite', action='store_true', help='Overwrite the output file if it exists')
parser.add_argument('-n', ' - num-records', type=int, default=10, help='The number of records to process') 

# Mutually exclusive arguments 
group = parser.add_mutually_exclusive_group() 
group.add_argument('-u', ' - uppercase', action='store_true', help='Convert the output to uppercase') 
group.add_argument('-l', ' - lowercase', action='store_true', help='Convert the output to lowercase') 

# Arguments with choices 
parser.add_argument('-c', ' - compression', choices=['gzip', 'bzip2', 'lzma'], help='The compression algorithm to use') 

# Positional arguments with variable number of inputs 
parser.add_argument(' - exclude', nargs='+', help='Exclude the specified files from processing') 

# Parse the command line arguments 
args = parser.parse_args()

Приведенный выше код импортирует модуль argparse и создает объект ArgumentParser, который будет использоваться для анализа и обработки аргументов командной строки для программы Python.

Объект ArgumentParser инициализируется аргументом prog, который указывает имя программы, и аргументом description, который предоставляет краткое описание программы.

Затем код определяет ряд аргументов командной строки, используя метод add_argument() объекта ArgumentParser. Метод add_argument() принимает ряд необязательных параметров, которые можно использовать для указания поведения и характеристик аргумента.

Первые два определенных аргумента — это input и output, которые являются обязательными аргументами, с которыми не связаны никакие параметры или флаги. За этими аргументами следует несколько необязательных аргументов, которые обозначаются ведущими - или -- и задаются с помощью параметров -v, -o и -n.

Код также определяет группу взаимоисключающих аргументов с помощью метода add_mutually_exclusive_group() и параметров -u и -l. Это означает, что одновременно может быть указан только один из этих параметров.

Затем код определяет аргумент с фиксированным набором вариантов, используя параметр choices и параметр -c. Этот аргумент можно указать только с одним из трех значений, перечисленных в параметре choices.

Наконец, код определяет позиционный аргумент с переменным числом входных данных, используя параметр nargs и параметр -exclude. Этот аргумент может быть указан с любым количеством значений, которые будут храниться в списке.

После определения всех аргументов код использует метод parse_args() объекта ArgumentParser для анализа аргументов командной строки и сохранения значений в объекте Namespace. Затем этот объект можно использовать для доступа к значениям аргументов в остальной части программы.

Альтернативные варианты argparse

Хотя argparse — мощный и широко используемый модуль для разбора и обработки аргументов командной строки в Python, он не всегда подходит для каждой ситуации. Существует ряд альтернативных вариантов, которые могут быть более подходящими для ваших конкретных потребностей.

Одной из популярных альтернатив argparse является модуль docopt, который позволяет вам определить интерфейс командной строки вашей программы, используя простой и интуитивно понятный синтаксис, основанный на естественном языке. Например, вот как вы можете определить интерфейс командной строки, используя docopt:

"""
Usage:
  myprogram.py [options] <input> <output>
Options:
  -h, --help              Show this screen
  -v, --verbose           Enable verbose output
  -o, --overwrite         Overwrite the output file if it exists
"""

В этом примере docopt будет анализировать аргументы командной строки и возвращать словарь, содержащий значения аргументов.

Еще один вариант, который следует рассмотреть, — это модуль click, который представляет собой мощную и гибкую библиотеку для создания интерфейсов командной строки в Python. click предоставляет широкий спектр функций и параметров настройки, включая поддержку подкоманд, автоматическую справку и сообщения об ошибках и многое другое.

Заключение

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

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

Увидимся в следующем посте, берегите себя!

~ Итан



Дополнительные материалы на PlainEnglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter, LinkedIn, YouTube и Discord .

Заинтересованы в масштабировании запуска вашего программного обеспечения? Ознакомьтесь с разделом Схема.