Если вы разработали сценарий Python или приложение, предназначенное для запуска в основном в эмуляторах терминала или даже в приложениях с графическим интерфейсом пользователя, добавление аргументов командной строки может улучшить его удобство использования, читаемость кода, структуру приложения и общее удобство использования приложения для конечных пользователей. Эти аргументы командной строки также называются «параметрами» или «переключателями» и работают аналогично аргументам, которые вы обычно видите в сценариях bash и других программах на C/C ++.
Чтобы добавить аргументы в сценарии Python, вам нужно будет использовать встроенный модуль с именем «argparse». Как следует из названия, он анализирует аргументы командной строки, используемые при запуске скрипта или приложения Python. Эти проанализированные аргументы также проверяются модулем «argparse», чтобы убедиться, что они имеют правильный «тип». Ошибки возникают, если в аргументах есть недопустимые значения.
Использование модуля argparse можно лучше понять на примерах. Ниже приведены несколько примеров кода, которые помогут вам начать работу с модулем argparse.
Пример 1: Создание аргумента и сообщения справки
Рассмотрим пример кода ниже:
import argparse parser = argparse.ArgumentParser(description='A test program.') args = parser.parse_args()
Первый оператор импортирует модуль «argparse». Затем создается новый экземпляр объекта «ArgumentParser», и в качестве аргумента предоставляется краткое описание программы. Объект ArgumentParser необходим для преобразования значений аргументов командной строки в типы данных, понятные Python. Это выполняется методом parse_args объекта ArgumentParser, как показано в последнем операторе.
Предполагая, что вы сохранили пример кода, указанный выше, в файле с именем «test.py», выполнение приведенных ниже команд приведет к появлению справочных сообщений, связанных с программой.
$ ./test.py -h $ ./test.py --help
Вы должны получить примерно такой результат:
usage: test.py [-h] A test program. optional arguments: -h, --help show this help message and exit
Обратите внимание, что в упомянутый выше пример кода не добавлена логика для обработки проанализированных аргументов и преобразования их в объекты. Следовательно, справочные сообщения для отдельных аргументов в выводе не отображаются. Как только вы добавите логику для обработки значений анализируемых аргументов в вашу программу, в справочных сообщениях начнется отображение описания отдельных аргументов.
Пример 2: Обработка строкового аргумента
Чтобы добавить аргументы, приемлемые для вашего скрипта python, вам необходимо использовать метод «add_argument». Взгляните на следующий код:
import argparse parser = argparse.ArgumentParser(description='A test program.') parser.add_argument("print_string", help="Prints the supplied argument.") args = parser.parse_args() print(args.print_string)
Был добавлен новый оператор, показывающий использование метода «add_argument». Любой аргумент, добавленный при запуске скрипта, будет обрабатываться ArgumentParser как объект «print_string».
Обратите внимание, что по умолчанию метод add_argument обрабатывает значения, полученные из аргументов, как строки, поэтому вам не нужно явно указывать «тип» в этом случае. Значение по умолчанию «Нет» также присваивается добавленным аргументам, если оно не отменено.
Еще раз взгляните на справочное сообщение:
usage: test.py [-h] [print_string] A test program. positional arguments: print_string Prints the supplied argument. optional arguments: -h, --help show this help message and exit
Одна из строк вывода говорит «позиционные аргументы». Поскольку ключевое слово для аргумента не определено, в настоящее время аргумент рассматривается как «позиционный аргумент», где порядок и позиция предоставленного аргумента имеют прямое влияние на программу. Позиционные аргументы также являются обязательными, если вы не измените их поведение вручную.
Чтобы определить и проанализировать необязательные аргументы, вы можете использовать «-» (двойное тире) и изменить их значения по умолчанию, используя аргумент «default».
import argparse parser = argparse.ArgumentParser(description='A test program.') parser.add_argument("--print_string", help="Prints the supplied argument.", default=”A random string.”) args = parser.parse_args() print(args.print_string)
Теперь, когда вы запускаете скрипт test.py без аргументов, вы должны получить «случайную строку». как выход. Вы также можете дополнительно использовать ключевое слово «–print_string» для печати любой строки по вашему выбору.
$ ./test.py --print_string AndreyEx.ru
AndreyEx.ru
Обратите внимание, что вы можете сделать необязательный аргумент обязательным, используя дополнительный аргумент «required = True».
Наконец, вы также можете определить сокращенные версии аргумента, используя «-» (одиночное тире), чтобы уменьшить многословие.
import argparse parser = argparse.ArgumentParser(description='A test program.') parser.add_argument(“-p”, "--print_string", help="Prints the supplied argument.", default=”A random string.”) args = parser.parse_args() print(args.print_string)
Выполнение следующей команды должно дать тот же результат, что и выше:
$ ./test.py -p AndreyEx.ru
Пример 3: Обработка целочисленного аргумента
Чтобы обрабатывать аргументы, которым требуются целочисленные значения, вам необходимо установить ключевое слово «type» на «int», чтобы разрешить проверку и выдавать ошибки в случае, если условие не выполняется.
import argparse parser = argparse.ArgumentParser(description='A test program.') parser.add_argument("-p", "--print_string", help="Prints the supplied argument.", type=int) args = parser.parse_args() print(args.print_string)
Попробуйте выполнить следующую команду:
$ ./test.py -p AndreyEx.ru
Вы должны получить такую ошибку:
usage: test.py [-h] [-p PRINT_STRING] test.py: error: argument -p/--print_string: invalid int value: 'AndreyEx.ru'
Предоставление целочисленного значения даст вам правильный результат:
$ ./test.py -p 1000
1000
Пример 4: Обработка переключателей True и False
Вы можете передавать аргументы без каких-либо значений, чтобы рассматривать их как флаги True и False, используя аргумент «action».
import argparse parser = argparse.ArgumentParser(description='A test program.') parser.add_argument("-p", "--print_string", help="Prints the supplied argument.", action="store_true") args = parser.parse_args() print(args.print_string)
Выполните команду ниже, чтобы получить на выходе простое «Истина»:
$ ./test.py -p
Если вы запустите сценарий без аргумента «-p», вместо него будет присвоено значение «Ложь». Значение «store_true» ключевого слова «action» присваивает значение «True» переменной «print_string» всякий раз, когда аргумент «-p» явно указан, в противном случае переменной присваивается значение «False».
Пример 5. Обработка значений аргументов как списка
Если вы хотите получить сразу несколько значений и сохранить их в списке, вам необходимо указать ключевое слово nargs в следующем формате:
import argparse parser = argparse.ArgumentParser(description='A test program.') parser.add_argument("-p", "--print_string", help="Prints the supplied argument.", nargs='*') args = parser.parse_args() print(args.print_string)
Выполните следующую команду, чтобы проверить приведенный выше код:
$ ./test.py -p “a” “b”
Вы должны получить примерно такой результат:
['a', 'b']
Вывод
Модуль «argparse» довольно обширен с множеством опций для настройки поведения приложений командной строки и анализа значений, вводимых пользователем. Эти примеры касаются только базового использования модуля «argparse». Для сложных и сложных приложений вам могут потребоваться разные реализации.