Простое руководство по созданию собственного скрипта Python с аргументами командной строки
Я считаю, что большинство из нас запускало эту командную строку для выполнения вашего скрипта Python.
$ python main.py
Можем ли мы сделать что-то вроде определения нашего собственного аргумента в этом скрипте? Ответ однозначно да!
$ python main.py arg1 arg2
Мы собираемся использовать модуль Python argparse для настройки аргументов и параметров командной строки. Модуль argparse упрощает создание удобных для пользователя интерфейсов командной строки. Программа определяет, какие аргументы ей требуются, а argparse выясняет, как их анализировать из sys.argv. Модуль argparse также автоматически генерирует справочные сообщения и сообщения об использовании и выдает ошибки, когда пользователи предоставляют программе неверные аргументы.
Начало работы с Argparse
Установка Argparse
Как обычно, первое, что нам нужно сделать, это установить этот модуль Python.
conda install argparse
Определение позиционных и необязательных аргументов
Создайте объект parser
с ArgumentParser
с описанием этого сценария. Positional Arguments
и Optional Arguments
определяются функцией add_argument
. Краткое описание того, что делает аргумент, добавлено с помощью help
.
Позиционные аргументы - это аргументы, которые необходимо указывать в правильной позиции или порядке.
Необязательные аргументы - это ключевые аргументы, которые вводятся с ключевым словом и знаком равенства, и они не являются обязательными.
- Попробуем запустить этот сценарий с аргументом справки
-h
.
$ python employee.py -h usage: employee.py [-h] [--address ADDRESS] name title This script is going to create an employee profile. positional arguments: name Name of Employee title Job Title of Employee optional arguments: -h, --help show this help message and exit --address ADDRESS Address of Employee
-h
и --help
по умолчанию определены в argparse
. Он покажет описания, которые мы определили в сценарии, чтобы помочь нашему пользователю при использовании сценария.
- Попробуем ввести
name
иtitle
.
$ python employee.py Alex Manager Name : Alex Job Title : Manager Address : None
Из-за отсутствия аргумента адреса NoneType
передается в Address
в этом скрипте. Нам пришлось бы преобразовать его в строку, чтобы распечатать.
- Давай попробуем только с
name
$ python employee.py Alex usage: employee.py [-h] [--address ADDRESS] name title employee.py: error: the following arguments are required: title
Поскольку заголовок также Positional Argument
, он является обязательным в этом сценарии.
- На этот раз попробуем с
name
,title
иaddress
.
$ python employee.py Alex Manager --address 123 Baker Street usage: employee.py [-h] [--address ADDRESS] name title employee.py: error: unrecognized arguments: Baker Street
Поскольку 123 Baker Street
содержит пробел, сценарий будет рассматривать Baker Street
как другие аргументы. В этом случае нам понадобятся двойные кавычки.
$ python employee.py Alex Manager --address "123 Baker Street" Name : Alex Job Title : Manager Address : 123 Baker Street
name
иtitle
потребуются двойные кавычки, если имя или заголовок состоит более чем из одного слова.
Определение логических аргументов
Давайте добавим приведенные выше коды в существующий скрипт. Мы собираемся определить необязательный аргумент с default=True
. Это означает, что даже мы никогда ничего не вводим в этот аргумент, по умолчанию он равен True
.
type=strtobool
используется здесь для обеспечения преобразования входных данных в тип данных логический. В противном случае это будет тип данных строка, когда скрипт будет передан во входные данные. Мы также можем определить его как type=int
, если нам нужен целочисленный аргумент.
%(default)s)
в справке - получить значение по умолчанию в аргументе. Это сделано для того, чтобы описание не было жестко закодированным и гибким с изменением значения по умолчанию.
- Попробуем еще раз с
name
,title
иaddress
$ python employee.py Alex Manager --address "123 Baker Street" Name : Alex Job Title : Manager Address : 123 Baker Street Alex is a full time employee.
По умолчанию isFullTime
равно True
, поэтому Алекс будет сотрудником на полную ставку, если мы никогда не вводим аргумент в isFullTime
.
- Давайте попробуем ввести
False
.
$ python employee.py Alex Manager --address "123 Baker Street" --isFullTime False Name : Alex Job Title : Manager Address : 123 Baker Street Alex is not a full time employee.
Опс! Алекс сейчас не работает на полную ставку.
Определение вариантов аргументов
Мы также можем ограничить возможные значения входного аргумента с помощью аргумента choices
. Это полезно, чтобы ваш пользователь не вводил недопустимое значение. Например, мы можем ограничить значение страны Сингапуром, США и Малайзией только с этим choices=[“Singapore”, “United States”, “Malaysia”]
.
- Посмотрим, что произойдет, если мы введем значение страны, а не в вариантах выбора.
$ python employee.py Alex Manager --country Japan usage: employee.py [-h] [--address ADDRESS] [--country {Singapore,United States,Malaysia}] [--isFullTime ISFULLTIME] name title employee.py: error: argument --country: invalid choice: 'Japan' (choose from 'Singapore', 'United States', 'Malaysia')
Мы столкнемся с ошибкой при неправильном выборе. Варианты всегда доступны в --help
.
Теперь вы узнали, как создать свою Командную строку Python с настраиваемыми аргументами. Надеюсь, эта статья будет вам полезна. Напишите мне комментарий, если я допустил ошибки или опечатки.
Вы можете просмотреть полный сценарий в моем Github. Ваше здоровье!
Если вам понравилось читать эту статью, возможно, вам понравятся следующие материалы:
Вы можете найти ссылки на другие мои работы на Medium и подписаться на меня здесь. Спасибо за чтение!