Как добавить аргументы командной строки в скрипт Python

How Add Command Line Arguments Python Script



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

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







Использование модуля argparse можно лучше понять на примерах. Ниже приведены несколько примеров кода, которые помогут вам начать работу с модулем argparse.



Пример 1: Создание аргумента и сообщения справки

Рассмотрим пример кода ниже:



Импортироватьargparse

парсер знак равноargparse.ArgumentParser(описаниезнак равно«Тестовая программа».)

аргументызнак равно парсер.parse_args()

Первый оператор импортирует модуль argparse. Затем создается новый экземпляр объекта ArgumentParser, и в качестве аргумента предоставляется краткое описание программы. Объект ArgumentParser необходим для преобразования значений аргументов командной строки в типы данных, понятные Python. Это выполняется методом parse_args объекта ArgumentParser, как показано в последнем операторе.





Предполагая, что вы сохранили пример кода, указанный выше, в файле с именем test.py, выполнение приведенных ниже команд приведет к получению справочных сообщений, связанных с программой.

$ ./тестовое задание.ру-час

$ ./тестовое задание.ру-помощь

Вы должны получить примерно такой результат:



использование: test.py [-h]


Тестовая программа.


необязательные аргументы:

-h, --help показать это справочное сообщение и выйти

Обратите внимание, что в упомянутый выше пример кода не добавлена ​​логика для обработки проанализированных аргументов и преобразования их в объекты. Следовательно, справочные сообщения для отдельных аргументов не отображаются в выходных данных. Как только вы добавите логику для обработки значений анализируемых аргументов в свою программу, в справочных сообщениях начнется отображение описания отдельных аргументов.

Пример 2: Обработка строкового аргумента

Чтобы добавить аргументы, приемлемые для вашего скрипта python, вам необходимо использовать метод add_argument. Взгляните на следующий код:

Импортироватьargparse

парсер знак равноargparse.ArgumentParser(описаниезнак равно«Тестовая программа».)

парсер.add_argument(print_string, помощьзнак равно'Печатает предоставленный аргумент.')

аргументызнак равно парсер.parse_args()

Распечатать(аргументы.print_string)

Был добавлен новый оператор, показывающий использование метода add_argument. Любой аргумент, добавленный при запуске скрипта, будет обрабатываться ArgumentParser как объект print_string.

Обратите внимание, что по умолчанию метод add_argument обрабатывает значения, полученные из аргументов, как строки, поэтому вам не нужно явно указывать тип в этом случае. Значение по умолчанию None также присваивается добавленным аргументам, если оно не переопределено.

Еще раз взгляните на справочное сообщение:

использование: test.py [-h] [print_string]


Тестовая программа.


позиционные аргументы:

print_string Печатает предоставленный аргумент.


необязательные аргументы:

-h, --help показать это справочное сообщение и выйти

Одна из строк вывода говорит о позиционных аргументах. Поскольку ключевое слово для аргумента не определено, в настоящее время аргумент обрабатывается как позиционный аргумент, где порядок и позиция предоставленного аргумента имеют прямое влияние на программу. Позиционные аргументы также являются обязательными, если вы не измените их поведение вручную.

Чтобы определить и проанализировать необязательные аргументы, вы можете использовать - (двойное тире) и изменить их значения по умолчанию, используя аргумент по умолчанию.

Импортироватьargparse

парсер знак равноargparse.ArgumentParser(описаниезнак равно«Тестовая программа».)

парсер.add_argument('--print_string', помощьзнак равно'Печатает предоставленный аргумент.',дефолтзнак равноКслучайный нить.)

аргументызнак равно парсер.parse_args()

Распечатать(аргументы.print_string)

Теперь, когда вы запускаете скрипт test.py без аргументов, вы должны получить случайную строку. как выход. Вы также можете при желании использовать ключевое слово –print_string для печати любой строки по вашему выбору.

$ ./тестовое задание.ру--print_string LinuxHint.с участиемLinuxHint.com

Обратите внимание, что вы можете сделать необязательный аргумент обязательным, используя дополнительный аргумент required = True.

Наконец, вы также можете определить сокращенные версии аргумента, используя - (одиночное тире), чтобы уменьшить многословие.

Импортироватьargparse

парсер знак равноargparse.ArgumentParser(описаниезнак равно«Тестовая программа».)

парсер.add_argument(-п, '--print_string', помощьзнак равно'Печатает предоставленный аргумент.',дефолтзнак равноКслучайный нить.)

аргументызнак равно парсер.parse_args()

Распечатать(аргументы.print_string)

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

$ ./тестовое задание.ру-p Linux Подсказка.с участием

Пример 3: Обработка целочисленного аргумента

Чтобы обрабатывать аргументы, которым требуются целочисленные значения, вам необходимо установить для ключевого слова type значение int, чтобы разрешить проверку и выдавать ошибки в случае, если условие не выполняется.

Импортироватьargparse

парсер знак равноargparse.ArgumentParser(описаниезнак равно«Тестовая программа».)

парсер.add_argument('-п', '--print_string', помощьзнак равно'Печатает предоставленный аргумент.', типзнак равноint)

аргументызнак равно парсер.parse_args()

Распечатать(аргументы.print_string)

Попробуйте выполнить следующую команду:

$ ./тестовое задание.ру-p Linux Подсказка.с участием

Вы должны получить такую ​​ошибку:

использование: test.py [-h] [-p PRINT_STRING]

test.py: ошибка: аргумент -p / - print_string: недопустимое значение int: 'LinuxHint.com'

Предоставление целочисленного значения даст вам правильный результат:

$ ./тестовое задание.ру-п10001000

Пример 4: Обработка переключателей 'Истина' и 'Ложь'

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

Импортироватьargparse

парсер знак равноargparse.ArgumentParser(описаниезнак равно«Тестовая программа».)

парсер.add_argument('-п', '--print_string', помощьзнак равно'Печатает предоставленный аргумент.',действиезнак равно'store_true')

аргументызнак равно парсер.parse_args()

Распечатать(аргументы.print_string)

Выполните команду ниже, чтобы получить на выходе простое значение True:

$ ./тестовое задание.ру-п

Если вы запустите сценарий без аргумента -p, вместо него будет присвоено значение False. Значение store_true ключевого слова action присваивает значение True переменной print_string всякий раз, когда аргумент -p явно указан, в противном случае переменной присваивается значение False.

Пример 5. Обработка значений аргументов как списка

Если вы хотите получить сразу несколько значений и сохранить их в списке, вам необходимо указать ключевое слово nargs в следующем формате:

Импортироватьargparse

парсер знак равноargparse.ArgumentParser(описаниезнак равно«Тестовая программа».)

парсер.add_argument('-п', '--print_string', помощьзнак равно'Печатает предоставленный аргумент.',наргизнак равно'*')

аргументызнак равно парсер.parse_args()

Распечатать(аргументы.print_string)

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

$ ./тестовое задание.ру-p а б

Вы должны получить примерно такой результат:

['a', 'b']

Заключение

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