Python передать параметры через консоль

Обновлено: 07.07.2024

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

Предоставляемый модуль getopt, может анализировать параметры и аргументы командной строки Python.

Как происходит передача аргументов командной строки Python?

Команда ls часто используется для получения сводной информации о файлах и папках, находящихся в определенном каталоге.

Зачем использовать argparse?

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

Доступ к аргументам командной строки

Модуль Python sys предоставляет доступ к аргументам командной строки через sys.argv. Он решает две задачи:

Модуль Python sys

Это базовый модуль, который с самого начала поставлялся с дистрибутивом Python. Это тот же подход, что и библиотека C, использующая argc / argv для доступа к аргументам. Модуль sys реализует аргументы командной строки в простой структуре списка с именем sys.argv.

Он хранит аргументы командной строки в списке; мы можем получить к нему доступ, используя sys.argv. Это очень полезный и простой способ читать аргументы командной строки как String.

Модуль Python getopt

Модуль Python getopt расширяет разделение входной строки проверкой параметров. Основанный на функции getopt C, он позволяет использовать как короткие, так и длинные варианты, включая присвоение значений.

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

Модуль Python argparse

Предлагает интерфейс командной строки со стандартизованным выводом, тогда как первые два решения оставляют большую часть работы в ваших руках. argparse позволяет проверять фиксированные и необязательные аргументы с проверкой имени в стиле UNIX или GNU.

getopt.getopt метод

Этот метод используется для анализа параметров командной строки и списка параметров.

Исключение getopt.GetoptError

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

Как использовать?

Модуль Применение Версия Python
sys Все аргументы в sys.argv (базовый) Все
argparse Создать интерфейс командной строки > = 2.3
docopt Создать интерфейсы командной строки > = 2,5
fire Автоматически создавать интерфейсы командной строки (CLI) Все
optparse Устарело <2,7

Docopt используется для создания интерфейсов командной строки.

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


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

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

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

Библиот е ка Python argparse была выпущена как часть стандартной библиотеки вместе с Python 3.2. После этого релиза в силу своей популярности она была интегрирована в Python 2.7 и во все будущие версии Python, быстро став золотым стандартом для работы с аргументами командной строки. Она предоставляет следующие функции:

Проведем небольшую экскурсию по библиотеке argparse Python.

Откройте пустой сценарий Python. Библиотека argparse встроена в Python, соответственно процедура установки не потребуется. На фрагменте кода ниже показано, как создать начальную установку для argparse:

В этом коде есть 3 важных компонента:

  1. Импорт argparse .
  2. Создание парсера аргументов (с описанием).
  3. Парсинг аргументов командной строки.

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

Прелесть argparse заключается в том, что она автоматически работает с командной строкой с помощью этой простой настройки. Запустите программу с --help в конце и argparse выведет описание руководства по argparse!

Теперь добавим аргумент командной строки с именем “a”, как показано во фрагменте кода ниже. Чтобы передать аргумент командной строки в сценарий Python, запустите его с помощью python3 argparse_2.py --a=5 :

Обратите внимание на использование функции .add_argument() для передачи "a" в качестве аргумента командной строки. Чтобы получить доступ к переменной, полученной из a , используем args.a .

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

В данном случае, если мы не передадим значение для a через командную строку, то a приобретет значение по умолчанию, равное 1. Добавив строку для переменной help , мы также сможем напечатать более эффективное описание для каждой переменной, используя --help :

Рассмотрим еще несколько интересных опций с argparse . Во-первых, мы можем указать информацию о типе каждой переменной так, чтобы преобразование типов выполнялось прямо на входе:

Чтобы убедиться, что пользователь всегда передает значение для определенного аргумента можно использовать ключевое слово required . Установленное значение True вынуждает пользователя вводить данные только для этого значения, иначе программа выдаст ошибку и остановится.

Мы также можем ввести возможные значения для определенного аргумента командной строки с помощью аргумента choices . Полезная функция, особенно при наличии в коде набора операторов if-else, которые выполняют определенные операции на основе одной строки. Пример:

Настало время двигаться дальше и перейти к продвинутому argparse!

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

В приведенном выше коде говорится, что если в командной строке присутствует аргумент a , то он будет иметь значение True , а в противном случае False . Аналогичным образом, при наличии аргумента командной строки b он должен иметь значение 10 , а в противном случае None из-за отсутствия значения по умолчанию!

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

Аргументы argparse - a и b - добавлены в одну взаимоисключающую группу. Таким образом, Python не позволит отправлять a и b одновременно, подобно python3 argparse_8.py --a --b . Эта функция гарантирует, что пользователь не передаст противоречащие друг другу переменные одновременно, что позволяет избежать путаницы или ошибок.

Вот и все! Вы прошли простое руководство по аргументам командной строки Python.

Разбор параметров командной строки в Python

При создании консольных программ в Python очень часто необходимо разобрать параметры (аргументы) передаваемые через командную строку, это можно сделать используя переменную argv из модуля sys, а так же с помощью модуля argparse из стандартной библиотеки Pyhton.

Второй способ более предпочтительный и удобный, далее ему мы уделим больше внимания.

Статья ниже не является полным описание всех возможностей модуля argparse, это просто общий обзор.

Получение параметров без использования argparse

Мы можем сделать это используя стандартный модуль sys и его переменную argv, она содержит список переданных параметров (нулевой элемент списка содержит имя нашего скрипта).

Другими словами, чтобы вывести имя, которое мы передаем аргументом, необходимо обратиться к sys.argv[1]:

python hello.py Александр

Запустив скрипт таким образом:

python hello.py --name Александр

Но, если мы передадим один параметр вместо двух, то скрипт не запуститься, нам необходимо добавить еще один if для проверки существование минимум двух параметров.

А если нам нужно добавить еще несколько параметров, а если не все из них обязательные… короче код начнется превращаться в ужас, вот здесь нам на помощь и придет модуль argparse стандартной питоновской библиотеки.

Использование модуля argparse

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

Начнем переписывать наш пример:

python hello2.py Александр

Мы получим то, что требовалось:

Разберем подробнее строку:

parser.add_argument('name', nargs='?', default='мир!')

Важно помнить, что при позиционных аргументах важен их порядок в момент, когда мы вызываем скрипт. Первый аргумент, переданный скрипту, становится первым позиционным аргументом, второй аргумент — вторым позиционным аргументом и т.д.

Для этого всего лишь надо изменить одну строку создания аргумента

python hello2.py --name Александр

parser.add_argument('-n', '--name', default='мир!')

python hello2.py --name Александр Третьяков

Выполнив это сейчас мы получим ошибку error: unrecognized arguments: Третьяков поскольку модуль argparse решил что фамилия это отдельный аргумент.

Теперь повторно вызвав скрипт, получим все переданные параметры в виде списка:

Привет ['Александр', 'Третьяков']

Выбор агрументов из определенных вариантов

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

Если брать наш пример выше, можем добавить, чтобы скрипт принимал только определенные имена: Александр, Екатерина, Татьяна, Евгений. Для этого добавим в метод add_argument параметр choices, в котором укажем список возможных значений параметра (в нашем случае список имен).

parser.add_argument ('-n', '--name', choices=['Александр', 'Екатерина', 'Татьяна', 'Евгений'])

python hello2.py --name Екатерина

А если попробуем передать имя не из одобренного списка:

hello2.py --name Ольга

hello2.py: error: argument -n/--name: invalid choice: 'Ольга' (choose from 'Александр', 'Екатерина', 'Татьяна', 'Евгений')

Справка (помощь) по аргументам

Итак изменим 2 строчки нашего кода, добавив в него справочную информацию:

python hello2.py --help

Мы получим справку о нашей программе:

Аргументы как флаги

Для этого добавим строку:

parser.add_argument ('-bye', action='store_const', const=True, help='Установите, если нужно ли прощаться с пользователем')

Теперь если добавить флаг -bye при вызове скрипта:

python hello2.py --name Александр -bye

Без добавления -bye мы получим просто:

Флаги со значениями True и False используются часто, поэтому для этих целей предусмотрено 2 специальных значения для параметра action: store_true и store_false.

Можно переписать наш код так:

parser.add_argument ('-bye', action='store_true', help='Установите, если нужно ли прощаться с пользователем')

Кстати, выше мы увидели что для добавление второго, третьего и т.д. аргумента, нам нужно просто еще раз вызвать метод add_argument и передать ему значения параметра.

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

Что такое аргументы командной строки в Python?

Аргументы командной строки Python – это входные параметры, передаваемые скрипту при их выполнении.

Есть много вариантов чтения аргументов командной строки в python. Три самых распространенных модуля:

Давайте рассмотрим простую программу, чтобы узнать, как читать и использовать аргументы командной строки в python.

Модуль sys

Модуль sys в Python хранит аргументы командной строки в списке, мы можем получить к нему доступ с помощью sys.argv. Это очень полезный и простой способ читать аргументы командной строки, как String. Давайте посмотрим на простой пример чтения и печати аргументов командной строки с использованием данного модуля.

Изображение ниже иллюстрирует результат выполнения примера выполнения вышеуказанной программы:

Аргумент в командной строке

Модуль getopt

Модуль getopt очень похож по работе с функцией getopt() для анализа параметров командной строки.

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

Разбор аргументов командной строки в Python с использованием модуля дальнейшего сжатия

Модуль argparse

Ниже приведены результаты быстрого запуска вышеуказанного сценария:

Аргументы командной строки python с использованием модуля argparse

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

Читайте также: