Простое руководство по созданию собственного скрипта 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 и подписаться на меня здесь. Спасибо за чтение!