Как сделать скрипт на python

Обновлено: 07.07.2024

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

В этом материале рассмотрим 7 способов запуска кода, написанного на Python. Они будут работать вне зависимости от операционной системы, среды Python или местоположения кода.

Где запускать Python-скрипты и как?

Python-код можно запустить одним из следующих способов:

  1. С помощью командной строки операционной системы (shell или терминал);
  2. С помощью конкретной версии Python или Anaconda;
  3. Использовать Crontab;
  4. Запустить код с помощью другого Python-скрипта;
  5. С помощью файлового менеджера;
  6. Использовать интерактивный режим Python;
  7. Использовать IDE или редактор кода.

Запуск Python-кода интерактивно

Для запуска интерактивной сессии нужно просто открыть терминал или командную строку и ввести python (или python3 в зависимости от версии). После нажатия Enter запустится интерактивный режим.

Вот как запустить интерактивный режим в разных ОС.

Интерактивный режим в Linux

Откройте терминал. Он должен выглядеть приблизительно вот так :

терминал Linux запуск python

После нажатия Enter будет запущен интерактивный режим Python.

Интерактивный режим в macOS

На устройствах с macOS все работает похожим образом. Изображение ниже демонстрирует интерактивный режим в этой ОС.

терминал MacOs запуск python

Интерактивный режим в Windows

В Windows нужно открыть командную строку и ввести python . После нажатия Enter появится приблизительно следующее:

терминал Windows запуск python

Запуск Python-скриптов в интерактивном режиме

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

Запуск Python-скриптов в интерактивном режиме

Этот код должен выводить целые числа от 0 до 5. В данном случае вывод — все, что появилось после print(i) .

Для выхода из интерактивного режима нужно написать следующее:

И нажать Enter. Вы вернетесь в терминал, из которого и начинали.

Есть и другие способы остановки работы с интерактивным режимом Python. В Linux нужно нажать Ctrl + D, а в Windows — Ctrl + Z + Enter.

Стоит отметить, что при использовании этого режима Python-скрипты не сохраняются в локальный файл.

Как выполняются Python-скрипты?

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

При запуске скрипта интерпретатор Python проходит сверху вниз, выполняя каждую из них. Именно таким образом происходит выполнение кода.

Но и это еще не все.

Блок-схема выполнения кода интерпретатором

  • Шаг 1: скрипт или .py-файл компилируется, и из него генерируются бинарные данные. Готовый файл имеет расширение .pyc или .pyo.
  • Шаг 2: генерируется бинарный файл. Он читается интерпретатором для выполнения инструкций.

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

Иногда полезно изучать байткод. Если вы планируете стать опытным Python-программистом, то важно уметь понимать его для написания качественного кода.

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

Как запускать Python-скрипты?

Для запуска Python-скрипта с помощью командной строки сначала нужно сохранить код в локальный файл.

Возьмем в качестве примера файл, который был сохранен как python_script.py. Сохранить его можно вот так:

Сохранить скрипт в текстовом редакторе достаточно легко. Процесс ничем не отличается от сохранения простого текстового файла.

Но если использовать командную строку, то здесь нужны дополнительные шаги. Во-первых, в самом терминале нужно перейти в директорию, где должен быть сохранен файл. Оказавшись в нужной папке, следует выполнить следующую команду (на linux):

После нажатия Enter откроется интерфейс командной строки, который выглядит приблизительно следующим образом:

интерфейс командной строки

Теперь можно писать код и с легкостью сохранять его прямо в командной строке.

click

Python — невероятно гибкий язык программирования, который хорошо интегрируется с существующими программами. Немало Python-кода написано в виде скриптов и интерфейсов командной строки (CLI).

Инструменты и интерфейсы командной строки — эффективная вещь, так как они позволяют автоматизировать практически всё что угодно. Как следствие, эти интерфейсы с течением времени могут стать довольно сложными.

Обычно всё начинается с простого скрипта на Python, который что-то делает. Например, получает доступ к веб-API и выводит результат в консоль:

Вы можете запустить этот скрипт с помощью команды python3 print_user_agent.py , и он выведет имя user-agent, использованного для вызова API.

ABBYY , Удалённо , По итогам собеседования

Как и было сказано, довольно простой скрипт.

Но что делать, когда подобная программа растёт и становится всё более сложной?

Решением этого вопроса мы сегодня и займёмся. Вы узнаете об основах написания интерфейсов командной строки на Python и о том, как click позволяет упростить этот процесс.

Используя эти знания, мы шаг за шагом перейдём от простого скрипта к интерфейсу командной строки с аргументами, опциями и полезными инструкциями по использованию. Всё это мы сделаем с помощью библиотеки click.

К концу этой статьи вы будете знать:

  • Почему click — лучшая альтернатива argparse и optparse;
  • Как с его помощью создать простой CLI;
  • Как добавить обязательные аргументы командной строки в ваши скрипты;
  • Как парсить флаги и опции командной строки;
  • Как сделать ваши консольные приложения более удобными, добавив справочный текст.

Вы увидите, как сделать всё это с минимальным количеством шаблонного кода.

Примечание переводчика Код в данной статье написан на Python 3.6, работоспособность на более ранних версиях не гарантируется.

Зачем вам писать скрипты и инструменты для командной строки на Python?

Код выше — всего лишь пример, не очень полезный в реальной жизни. На самом деле скрипты бывают куда более сложные. Возможно, вы имели опыт с ними и знаете, что они могут быть важной частью нашей повседневной работы: некоторые скрипты остаются на протяжении всего времени жизни проекта, для которого они были написаны. Некоторые начинают приносить пользу другим командам или проектам. У них даже может расширяться функционал.

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

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

Основы интерфейса командной строки

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

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

  1. Аргумент, который является обязательным параметром. Если его не передать, то CLI вернёт ошибку. Например, в следующей команде click является аргументом: pip install click .
  2. Опция — необязательный параметр, который объединяет имя и значение, например --cache-dir ./my-cache . Вы говорите CLI, что значение ./my-cache должно использоваться как директория для кэша.
  3. Флаг, который включает или выключает определённый сценарий. Вероятно, самым частым является --help . Вы только указываете имя, а CLI самостоятельно интерпретирует значение.

С более сложными CLI, такими как pip или Heroku CLI, вы получаете доступ к набору функций, которые собраны под главной точкой входа. Они обычно называются командами или подкомандами.

Возможно, вы уже использовали CLI, когда устанавливали Python-библиотеку с помощью команды pip install . Команда install говорит CLI, что вы хотите использовать функцию установки пакета, и даёт вам доступ к параметрам, характерным для этой функции.

Пакеты для работы с командной строкой, доступные в стандартной библиотеке Python 3.x

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

По большей части они делают одно и то же и работают схожим образом. Главное отличие заключается в том, что optparse не используется начиная с Python 3.2, и argparse считается стандартом для создания CLI в Python.

Вы можете узнать о них больше в документации Python, но, чтобы иметь представление, как выглядит скрипт с argparse, посмотрите на пример ниже:

click против argparse: лучшая альтернатива?

Поэтому вам может понравиться click.

Click решает ту же проблему, что и optparse и argparse, но немного иначе. Он использует декораторы, поэтому ваши команды должны быть функциями, которые можно обернуть этими декораторами.

С click легко создавать многофункциональный CLI с небольшим количеством кода. И этот код будет легко читаться, даже когда ваш CLI вырастет и станет более сложным.

Пишем простой CLI на Python с помощью click

Вдоволь поговорив о CLI и библиотеках, давайте взглянем на пример, чтобы понять, как написать простой CLI с click. Как и в первом примере, мы создаём простой CLI, который выводит результат в консоль. Это несложно:

Не пугайтесь последних двух строк: это то, как Python запускает функцию main при исполнении файла как скрипта.

Более реалистичный пример CLI на Python с использованием click

Теперь, когда вы знаете, как click упрощает написание CLI, давайте взглянем на более реалистичный пример. Мы напишем программу, которая позволяет нам взаимодействовать с веб-API.

API, который мы дальше будем использовать, — OpenWeatherMap API. Он предоставляет информацию о текущей погоде, а также прогноз на пять дней для определённого местоположения. Мы начнём с тестового API, который возвращает текущую погоду для места.

Давайте посмотрим, что случится, когда мы обратимся к API с Лондоном в качестве местоположения:

Если вы смущены наличием API-ключа в примере сверху, не переживайте, это тестовый API-ключ, предоставляемый сервисом.

  • q — место, в котором мы хотим узнать погоду;
  • appid — наш API-ключ.

Это позволяет нам создать простую реализацию на Python с использованием библиотеки requests (опустим обработку ошибок и неудачных запросов для простоты):

Эта функция делает простой запрос к API, используя два параметра. В качестве обязательного аргумента она принимает location (местоположение), которое должно быть строкой. Также мы можем указать API-ключ, передавая параметр api_key при вызове функции. Это необязательно, так как по умолчанию используется тестовый ключ.

И вот мы видим текущую погоду в Python REPL:

Парсим обязательные параметры с click

Простая функция current_weather позволяет нам создать CLI с местоположением, указанным пользователем. Это должно работать примерно так:

Как вы, возможно, догадались, местоположение — это аргумент, поскольку оно является обязательным параметром для нашего погодного CLI.

Как нам сделать это при помощи click? Всё довольно просто, мы используем декоратор под названием argument . Кто бы мог подумать?

Давайте возьмём наш предыдущий пример и слегка изменим его, добавив аргумент location :

Если этот print выглядит для вас странно, не волнуйтесь — это новый способ форматирования строк в Python 3.6+, который называется f-форматированием.

Как вы видите, всё, что нам нужно сделать, это добавить дополнительный декоратор к нашей функции main и дать ему имя. Click использует имя в качестве имени аргумента, переданного обёрнутой функции.

Примечание переводчика Имя аргумента, переданное click, должно совпадать с именем аргумента в объявлении функции.

В нашем случае значение аргумента командной строки location будет передано функции main в качестве аргумента location . Логично, не так ли?

Также вы можете использовать тире в именах, например api-key , которые click переведёт в snake case для имени аргумента в функции, например main(api_key) .

Реализация main просто использует нашу функцию current_weather для получения погоды в указанном месте. И затем мы с помощью print выводим полученную информацию.

Парсим опциональные параметры с click

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

Первое, что нам нужно изменить, — URL, откуда берутся данные о текущей погоде. Это можно сделать, изменив значение переменной url в функции current_weather на URL, указанный в документации OpenWeatherMap:

Это изменение приведёт к неработоспособности нашего CLI, так как указанный API-ключ не работает с реальным API. Поэтому давайте добавим новый параметр в наш CLI, который позволит нам указывать API-ключ. Но сначала мы должны решить, будет ли этот параметр аргументом или опцией. Мы сделаем его опцией, так как добавление параметра вроде --api-key делает его более явным и говорящим за себя.
Мы хотим, чтобы наша программа запускалась таким образом:

Проще простого. Посмотрим, как добавить опцию к нашей существующей команде:

И снова мы добавляем декоратор к нашей функции main . В этот раз мы используем декоратор с говорящим именем @click.option и указываем имя для нашей опции, начинающееся с двух тире. Как вы видите, мы также можем указать сокращение для нашей опции с одним тире, чтобы сэкономить пользователю немного времени.

Как было сказано ранее, click создаёт аргумент для передачи в функцию main из длинного варианта имени. В случае с опцией он убирает впередистоящие тире и переводит её в snake case. Таким образом, --api-key становится api_key .

Чтобы всё заработало, осталось лишь передать API-ключ в функцию current_weather .

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

Добавляем автоматически генерируемые инструкции по использованию

Можете себя похвалить, вы создали отличный небольшой CLI почти без шаблонного кода. Однако прежде чем вы решите отдохнуть, давайте убедимся, что новый пользователь будет знать, как пользоваться нашим CLI, путём добавления документации. Не бойтесь, всё будет просто.

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

Второе (и последнее), что мы сделаем, — добавим документацию для всей click-команды. Самый простой и самый питонический способ сделать это — добавить строку документации в нашу функцию main . Да, нам в любом случае нужно сделать это, поэтому это не лишняя работа:

Сложив всё вместе, мы получаем хороший вывод для нашего инструмента:

Подводим итоги

Итак, в этом уроке мы рассмотрели много всего. Можете гордиться собой, вы написали свой собственный CLI, и всё это с минимальным количеством шаблонного кода! Исходный код ниже доказывает это. Не стесняйтесь использовать его для собственных экспериментов:

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

Вот что вы узнаете в этом уроке: Теперь, когда у вас есть работающая среда Python, вы увидите, как на самом деле выполнять код Python и запускать программы Python. К концу этой статьи вы узнаете, как:

Hello, World!

В области компьютерного программирования существует давняя традиция, согласно которой первый код, написанный на новом для вас языке, представляет собой короткую программу, которая просто печатает строку Hello, World! на консоль.

Примечание: Hello, world! એ — это проверенная временем традиция, восходящая к 1970-м годам. Вы серьезно рискуете нарушить ЦИ એ вселенной, если не будете соблюдать этот обычай.

Простой код Python 3 печатает Hello, World! :

Попробуем сделать это несколькими различными способами.

Интерактивное использование интерпретатора Python

Самый простой способ начать разговаривать на Python — это начать с интерактивного режима Read‑Eval‑Print‑Loop (REPL એ ). Просто запустите интерпретатор и начните вводить команды, которые будут мгновенно исполнены в главном цикле:

  • Reads — чтение, введённой вами команды;
  • Evaluates and executes — оценка (немедленная трансляция команды в нативную систему команд центрального процессора вычислительной системы, интерпретация) и выполнение команды;
  • Prints — вывод результата (если возможно) на консоль;
  • Loops — возврат к началу и повторение процесса.

Сеанс продолжается таким образом, пока вы не дадите переводчику команду прекратить работу. Большая часть примера кода в этой серии руководств представлена ​​как взаимодействие REPL.

Старт интерпретатора

На рабочем столе с графическим интерфейсом, вероятно, в процесс установки появится значок, который запускает Python, стол или элемент в главном меню.

Например, в Windows, в главном меню Пуск, наверняка, будет группа, помеченная Python 3.x или Python 3.x (32-bit), в зависимости от вашего выбора при установке рабочей версии Python.

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

При нажатии на этот пункт будет запущен интерпретатор Python:
Загрузка интерпретатора из командной строки

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

  • В Windows это называется командная строка (cmd).
  • В macOS или Linux необходимо использовать терминал.

В своей операционной системе можно использовать функцию поиска для “command” в Windows или “terminal” в macOS или Linux.

Если при установке Python правильно прописаны пути, то простая команда python вызовет интерпретатор и можно начинать писать и исполнять код..

Это пример для Windows:

Техническое замечание: Если вы используете систему Linux и установили Python 3, то может так оказаться, что Python 2 уже установлен. В этом случае при вводе команды python будет стартовать Python 2. Для запуска Python 3 может потребоваться что-то ещё, например, написать python3 .

Если вы установили более позднюю версию Python 3, чем та, которая была включена в дистрибутив, может даже потребоваться указать специально установленную версию, например, python3.6 .

Если нет подсказки >>> , то интерпретатор Python не загружен. Возможно, Python не установлен или не прописан путь для терминальной сессии. Возможно, вы просто не нашли правильную команду для ее выполнения. Просто повторите урок Заряжаем свой компьютер.

Выполнение кода Python

Если вы видите подсказку, то интерпретатор загружен и можно начинать! Необходимо проделать следующие шаги для того, что бы увидеть в консоли Hello, World! :

  1. Установите курсор в конце подсказки >>> .
  2. Запишите команду print("Hello, World!") точно так, как здесь показано.
  3. Нажмите клавишу Enter .

В следующей строке появится ответ интерпретатора. Смею вас заверить, что это вывод на консоль, потому как подсказка для ввода команды >>> отсутствует:

Если ваша сессия выглядит так, как описано выше, то это значит, что ваш первый код Python выполнен! Найдите минутку, чтобы порадоваться.
Поздравляю!

Что то не так? Возможно, вы сделали одну из следующих ошибок:

  • Забыли заключить фразу в кавычки:
  • Отсутствует какая-то кавычка, здесь — закрывающая:
  • Открывающая и закрывающая кавычки различаются:
  • Забыли скобки:
  • Ввели перед командой дополнительные пробелы после приглашения:

(В следующем разделе вы поймете почему это так важно.)

Завершение работы интерпретатора

Когда вам надоест разговаривать на Python, используя интерпретатор, то выйти из главного цикла REPL можно несколькими способами:

  • Наберите команду exit() и нажмите Enter :
  • В Windows введите Ctrl + Z и нажмите Enter :
  • В Linux или macOS введите Ctrl + D . Интерпретатор немедленно прекратит работу и нажимать Enter не потребуется.
  • Если ничего не получается, то можно просто закрыть окно интерпретатора. Конечно, не лучший способ, но срабатывает всегда.

Загрузка скриптов Python из командной строки

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

По мере того, как вы будете создавать более сложные приложения, ваш код будет расти, его придётся редактировать и, в конечном итоге, повторно запускать. Вам явно не понравится при каждом исправлении вводить каждый раз в интерпретатор весь код! Здесь бы проще создать файл сценария.

Скрипт Python — это многократно используемый набор кода. По сути, это программа — последовательность инструкций Python, содержащаяся в файле. Вы можете запустить программу, указав имя файла скрипта интерпретатору.

Скрипты Python — это обычный текст, и поэтому редактировать их можно в любом текстовом редакторе. Можно, воспользоваться опытом программистов на Python, выбрать и установить подходящий редактор. Если вы этого не сделаете, то можно использовать соответствующие программы своей операционной системы, которые, как правило, устанавливаются по-умолчанию:

Используя любой редактор по своему усмотрению, создайте файл hello.py и запишите туда код:

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

Запустите командную строку или окно терминала. Если текущий рабочий каталог совпадает с местоположением, в котором вы сохранили файл, вы можете просто указать имя файла в качестве аргумента командной строки для интерпретатора Python: python hello.py

В Windows, например, это выглядит так:

Если скрипт не находится в текущем рабочем каталоге, то его всё равно можно запустить, просто нужно указать путь к нему:

В Linux или macOS сессия может выглядеть примерно так:

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

Однако, именование файлов скриптов Python расширением .py крайне полезно и способствует пониманию содержимого файла — текст программы на Python. Кроме того, в desktop-ориентированных операционных системах, где есть папка/иконка, таких как Windows или macOS, можно создать ассоциацию, которая позволяет загружать интерпретатор для обработки скрипта одним кликом на иконке.

IDE для работы с Python

Интегрированная среда разработки (IDE એ ) — это приложение, которое более или менее сочетает в себе все функции, которые вы видели до сих пор. Среды IDE обычно предоставляют возможность REPL એ , а также редактор, с помощью которого вы можете создавать и изменять код для последующей передачи интерпретатору для выполнения.

Вы также можете найти интересные функции, такие как:

  • Сохранение и перезагрузка файлов с кодом.
    Если IDE или редактор не позволяют сохранять свою работу и открывать в том же состоянии, в котором она находилась ранее, то это не очень правильная IDE.
  • Запуск кода из среды
    Точно так же, если вам нужно выйти из редактора для запуска кода Python, то это не больше, чем простой текстовый редактор.
  • Поддержка отладки
    Возможность трассировки кода во время его работы — основная особенность всех IDE и большинства хороших редакторов кода.
  • Подсветка синтаксиса
    Возможность быстро находить ключевые слова, переменные и символы в вашем коде значительно облегчает чтение и понимание кода.
  • Автоматическое форматирование кода
    Любой редактор или интегрированная среда разработки распознают двоеточие в конце оператора while или for и знают, что следующая строка должна иметь отступ.

Большинство установок Python содержат простейшую IDE с именем IDLE. Название якобы означает интегрированную среду разработки и обучения, но одного из членов труппы Монти Пайтон એ зовут Эрик Идл, что вряд ли является совпадением.

Процедура запуска IDLE варьируется от одной операционной системы к другой.

Запуск IDLE в Windows

Кликните на иконку для запуска IDLE.

Запуск IDLE в macOS

Нажмите Cmd + Space и откройте Spotlight Search. В окне поиска введите terminal и нажмите Enter .

В окне терминала введите idle3 и нажмите Enter .

Запуск IDLE в Linux

IDLE доступна с дистрибутивом Python 3, но, возможно, он не был установлен по умолчанию. Чтобы узнать, так ли это, откройте окно терминала. В зависимости от дистрибутива Linux, терминал можно найти, используя поиск на рабочем столе. В окне терминала введите idle3 и нажмите Enter .

Способ установки приложений также варьируется от одного дистрибутива Linux к другому. Например, в Ubuntu Linux командой для установки IDLE является sudo apt‑get install idle3 . Во многих дистрибутивах Linux есть менеджеры приложений на основе графического интерфейса, которые вы также можете использовать для установки приложений.

Использование IDLE

Подробно об использовании IDLE можно узнать в отдельном уроке Быстрый старт с IDLE Python

Сайты с реализацией REPL для Python

Существуют веб-сайты, которые могут предоставить вам интерактивный доступ к интерпретатору Python через Интернет без локальной установки.

Этот подход может быть неудовлетворительным для некоторых из более сложных или длинных примеров в этом руководстве. Но для простых сессий REPL это должно работать хорошо.

Онлайн сессия REPL с программой Hello? World!

Вы должны получить страницу с окном, которое выглядит примерно так:
Онлайн сессия REPL с программой Hello? World!

Знакомая подсказка >>> показывает, что вы находитесь в интерпретаторе Python.

Вот несколько сайтов, которые предоставляют Python REPL:

Заключение

Большие приложения, как правило, содержатся в файлах скриптов, которые передаются в интерпретатор Python для исполнения.

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

Примеры в этом руководстве были подготовлены с помощью непосредственного взаимодействия с интерпретатором Python, но если вы решите использовать простаивающие или некоторые другие доступные IDE, то примеры должны по-прежнему работать нормально.

Переходите к следующему разделу, где вы начнете изучать элементы самого языка Python.

ст. преп. кафедры ЦЭиИТ. Автор более 130 научных и учебно-методических работ. Лауреат ВДНХ (серебряная медаль). Посмотреть больше записей


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

Разработка приложений с интерфейсом командной строки (CLI) чрезвычайно полезна, так как позволяет автоматизировать практически все. Но, со временем, CLI программы могут стать довольно сложными. Рассмотрим простой Python скрипт, который обращается по веб-API к серверу и распечатывает выходные данные в консоль:

Скрипт распечатает User-Agent пользователя, выполнив вызов к API. Но что делать, когда Python скрипт командной строки начнёт расти и усложняться?

В данной статье будет рассказано:

  • Почему click – лучшая альтернатива argparse и optparse
  • Как создавать программы с простым CLI
  • Как добавить обязательные аргументы командной строки в скрипты
  • Как парсить флаги и параметры командной строки
  • Как сделать приложения для командной строки более удобными, добавив текст справки

Все примеры кода в этом руководстве реализованы на Python 3.6. Они могут не работать с более ранними версиями Python, но если у вас возникнут проблемы, оставьте комментарий.

Зачем нам писать скрипты и инструменты командной строки на Python?

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

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

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

Основы интерфейса командной строки

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

Основными параметрами передаваемые в CLI приложение можно разделить на следующие группы:

  • Аргументы – обязательные параметры, передаваемые скрипту. Если их не определять, CLI вернет ошибку. Например, django– это аргумент в команде pip install django.
  • Опции – необязательные ([]) параметры, объединяющие имя и часть значения, например -cache-dir ./my-cache. Программе pip сообщается, что значение ./my-cache должно использоваться для определения каталога кэша.
  • Флаги – специальные опции, которые включают или отключают определенное поведение. Чаще всего это --help.

Вероятно, вы уже использовали CLI, когда устанавливали Python пакет, выполнив pip install . Команда install сообщает CLI, что необходимо получить доступ к функции устанавливающей пакет и предоставить доступ к параметрам, характерным для этой функции.

Фреймворки командной строки, доступные в стандартной библиотеке Python 3.x

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

Они в основном обеспечивают схожую функциональность и работают очень похоже. Самое большое отличие заключается в том, что библиотека optparse устарела и запрещена в Python 3.2, а argparse считается стандартом для реализации CLI в Python.

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

Код приведённый выше нельзя назвать интуитивно понятным и легко читаемым. Поэтому рекомендуется использовать click.

Использование click в качестве лучшей альтернативы

click разрешает ту же задачу, что и optparse и argparse, но использует несколько иной подход. Он использует концепцию декораторов. Это требует реализацию команд в виде функций, которые потом можно обернуть декоратором.

Основная причина, почему используют click – это то, что можно легко создать многофункциональный CLI с небольшим количеством кода. При этом код остаётся легко читаемым, даже когда CLI растет и становится более сложным.

Простой интерфейс командной строки Python с click

Создадим простое CLI приложение на основе click, который распечатывает текст в консоль.

Прелесть click – это то, что мы бесплатно получаем некоторые дополнительные функции. Не реализовывая никаких вспомогательных возможностей добавив параметр --help, распечатается основная страница справки в командную строку:

Более реалистичный пример CLI с click

Теперь, когда известно, как click упрощает создание простого CLI, рассмотрим более реалистичный пример. Напишем программу, которая позволяет взаимодействовать с веб API. Сегодня многие используются ими, потому что они предоставляют доступ к некоторым любопытным данным.

API который будет рассматриваться для оставшейся части этого материала – это OpenWeatherMap API. Он сообщает текущую погоду, а также прогноз на пять дней для определенного местоположения. Начнем с шаблона API, возвращающего текущую погоду для местоположения.

Давайте посмотрим, что произойдет, когда будет вызван API для города Москва:

  • q – местонахождение
  • appid - это ключ к API

Также можно создать простую реализацию с использованием Python и библиотеки Requests (будем игнорировать обработку ошибок и неудачные запросы для простоты.)

Функция создаёт простой запрос к API погоды, используя два параметра запроса. Она принимает обязательный аргумент location, который является строкой. Также можно предоставить ключ API, передав api_key в вызове функции. Он является необязательным и используется для примера по умолчанию.

Результат работы программы для Москвы

Парсинг обязательных параметров с click

Простая функция current_weather позволяет создавать собственный CLI с передачей пользователем аргумента location. Результат работы программы должен быть таким:

Рассмотрим простой пример, немного изменив предыдущий, указав аргумент location.

Всё, что нужно сделать, это добавить дополнительный декоратор к функции main и дать ему имя. click использует это имя в качестве имени аргумента, передаваемого в функцию обёртку.

В нашем случае значение расположения будет передано в функцию main через аргумент location.

Реализация основывается на простой функции current_weather, которая запрашивает погоду для location. Далее вызывается оператор print для вывода информации о погоде.

Оператор print выглядит немного странно, потому что это новый способ форматирования строк добавленный в Python 3.6+, называемый форматированием f-string.

Парсинг необязательных параметров с click

На данный момент функция current_weather всегда возвращает погоду в Москве начиная с января 2017 года. Также нужно определить реальный ключ к API. Для бесплатного получения ключа доступа зарегистрируйтесь на сайте openweathermap.

Изменим URL для текущей погоды location.

Итак, добавим новый параметр в CLI, который позволяет указать ключ API. Но сначала нужно определиться, должен это быть аргумент или опция. Определим параметр как опция, потому что добавление именованного параметра, такого как --api-key, делает его более явным и очевидным.

Модифицированная версия CLI приложения

Таким образом добавлен ещё один декоратор функции main. На этот раз используется декоратор @click.option, добавляя опцию с ведущими двойными тире (-). Также можно определить краткую опцию с одним тире (-), чтобы реализовать краткий пользовательский ввод.

Как уже было сказано, click создает аргумент, переданный функции main из длинной версии имени. В случае опции, фреймворк распаковывает ведущие тире и превращает их в snake case. --API-key превращается в api_key.

Теперь пользователь CLI приложения может использовать собственный ключ и определить любое местоположение:

Добавление справки по использованию приложения

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

Сначала проверим, что распечатает приложение после запуска с флагом - -help.

В заключение добавим справочную информацию о назначении и кратких примерах использования. Самый простой и самый питоничный способ – это добавление docstring к функции main. Это необходимо выполнять в любом случае, так что это даже не лишняя работа:

Объединяя все изменения, получаем результат:

Результаты и резюме

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

  • Почему click лучше, чем argparse и optparse
  • Как создать простой CLI
  • Как добавить обязательные аргументы командной строки в скрипты
  • Как парсить флаги и параметры командной строки
  • Как сделать приложения для командной строки более удобными, добавив текст справки

Ниже приведен полный пример кода. Не стесняйтесь использовать его в своих проектах

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