Лайфхаки

Маленькие, полезные хитрости

Пишем интерфейсы командной строки в Python, как профи. Как писать интерфейсы командной строки Python, как профессионал

26.05.2023 в 02:32

Пишем интерфейсы командной строки в Python, как профи. Как писать интерфейсы командной строки Python, как профессионал

Мы, как специалисты по обработке данных, сталкиваемся с множеством повторяющихся и похожих задач. Это включает в себя создание еженедельных отчетов, выполнение извлечения, преобразования, загрузки ( ETL) задания или модели обучения с использованием различных наборов параметров. Зачастую мы получаем кучу скриптов Python, где мы меняем параметры в коде каждый раз, когда запускаем их. Я ненавижу это делать! Вот почему я привык превращать свои сценарии в инструменты многократного использования интерфейса командной строки (CLI). Это повысило мою эффективность и сделало меня более продуктивным в моей повседневной жизни. Я начал делать это с помощью Argparse но это не доставляло удовольствия, так как мне приходилось создавать много уродливого кода. Поэтому я подумал, не могу ли я достичь этого без необходимости писать много кода снова и снова? Могу ли я даже наслаждаться написанием инструментов CLI?

щелчок твой друг!

Так что же такое Click? С веб-страницы:

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

Для меня это звучит замечательно, не правда ли?

В этой статье я дам вам практическое руководство о том, как создавать Python CLI с помощью Click. Я создаю пример шаг за шагом, который показывает вам основные функции и преимущества Click click. После этого урока вы сможете написать свой следующий инструмент CLI с радостью и в мгновение ока :) Так что давайте запачкаем руки!

Эмулятор командной строки Python. ConEmu - эмулятор консольного окна Windows

ConEmu-Maximus5 это «графический хост» для консольных приложений Windows.
При запуске нового консольного приложения в ConEmu реальное окно консоли не отображается, а весь вывод и ввод перехватывается и перенаправляется в ConEmu. Основное назначение - совместное использование с Far Manager . Но в ConEmu можно запускать и другие приложения: cmd, powershell, dn, putty, notepad, и т.п.

Несколько

Бонусы, которые получает пользователь

  • Простой ресайз окна консоли, максимизация и полноэкранный режим (Alt+Enter), который не требует перевода видекарты в текстовый режим; отсутствие проблемы появления полос прокрутки в Far при блокировании (засыпании) компьютера;
  • Встроенная поддержка мультиконсоли (несколько приложений в одном окне ConEmu), возможность запускать новые приложения от имени администратора;
  • Простой запуск DOS приложений в Windows 7 и 64битных OS через DosBox ;
  • Консоли, запущенные в режиме администратора помечаются значком «Щит»;
  • При выполнении консольных приложений, запущенных из Far, высота консольного буфера автоматически увеличивается. Просмотр полного вывода предыдущей команды - макрос на CtrlO;
  • Можно выбрать тип отображаемого консольного курсора (как в GUI, либо как в консоли), или отключить его мигание;
  • Улучшена работа плагина PictureView ;
  • Встроенная поддержка Drag&Drop (shell style) между панелями и другими приложениями;
  • Можно использовать и с другими консольными программами (например cmd.exe) с установкой высоты буфера и прокруткой окна с клавиатуры;
  • Возможность переключения между окнами Far (панели, редактор, вьювер) через закладки, отображаемые в верхней части окна ConEmu. Встроенная поддержка переключения между закладками (любых открытых консолей) в стиле RecentTabs;
  • Выбор типа сглаживания шрифтов, выбор шрифта и его размера + некоторые попытки поддержать немоноширинные шрифты;
  • Отображение юникодных символов - иероглифов и т.п. (естественно, в юникодной версии Фара и при выборе юникодного шрифта);
  • Все настройки загружаются из реестра (или XML файла). Допускается использование множества «конфигураций», имя загружаемой конфигурации можно указать в параметрах запуска (ключ /config);
  • Изменения большинства опций применяются «на лету» и могут быть сразу сохранены в реестр/XML-файл (диалог "Settings" открывается через щелчок правой кнопкой по заголовку -> Settings либо Alt+Space -> Settings);
  • Поддерживаются нестандартные цвета консоли, несколько предопределенных цветовых схем;
  • Возможность использования 32 цветов текста вместо стандартных 16-и;
  • Возможность использования 24битных цветов (TrueColor) в Far3 вместо стандартных 16-и;
  • Короткий правый клик мышкой в Far - выделение файлов, длинный правый клик - вызов контекстного меню проводника для элемента. Контекстное меню работает "из коробки", настройка не требуется. ;
  • Возможность повесить макрос Far на сочетание Alt+Enter (например, то же контекстное меню);
  • Умеет сворачивать программу в трей (к часикам) автоматически при минимизации, или при правом щелчке по крестику;
  • Улучшенное отображение псевдографических символов (прокрутки, progressbar, и пр.);
  • Поддержка прогресса на иконке в Win7 (ИИ определяет проценты выполнения как по заголовку, так и по содержимому консоли);
  • Окно можно делать прозрачным;
  • И многое другое… смотрите документацию , окно настроек и What's New .

Python интерфейс в консоли. Как реализовать интерфейс командной строки?

Интерфейс командной строки (также известный под аббревиатурой CLI Command line interface ) – это прежде всего способ взаимодействия с исполняемым сценарием. Python поставляется с несколькими модулями, которые позволяют реализовать интерфейс командной строки для ваших сценариев, тем не менее в настоящее время стандартным способом работы с интерфейсом командной строки в сценариях Python является модульargparse.

Библиотекаargparseбыла выпущена 20 февраля 2011 года как часть стандартной библиотеки, начиная с версии Python 3.2. Она была представлена в Python Enhancement Proposal 389 и теперь предоставляет стандартный способ реализации CLI в сценариях Python как в версии 2.7, так и 3.2.

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

Модульargparseпозволяет:

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

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

$ ls dcdb_20180201.sg4 mastro35.sg4 openings.sg4 dcdb_20180201.si4 mastro35.si4 openings.si4 dcdb_20180201.sn4 mastro35.sn4 openings.sn4

И так мы видим, что в текущем каталоге есть куча файлов, но команда кроме их списка не вывела больше никакой информации о файлах.

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

Попробуйте снова выполнить команду ls , но теперь при ее вызове в командной строке добавьте опцию-l, как в примере ниже:

$ ls -l total 641824 -rw------- 1 dave staff 204558286 5 Mar 2018 dcdb_20180201.sg4 -rw------- 1 dave staff 110588409 5 Mar 2018 dcdb_20180201.si4 -rw------- 1 dave staff 2937516 5 Mar 2018 dcdb_20180201.sn4 -rw------- 1 dave staff 550127 27 Mar 2018 mastro35.sg4 -rw------- 1 dave staff 15974 11 Gen 17:01 mastro35.si4 -rw------- 1 dave staff 3636 27 Mar 2018 mastro35.sn4 -rw------- 1 dave staff 29128 17 Apr 2018 openings.sg4 -rw------- 1 dave staff 276 17 Apr 2018 openings.si4 -rw------- 1 dave staff 86 18 Apr 2018 openings.sn4

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

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

И так давайте сразу же проясним терминологию.

Аргумент – это отдельная часть командной строки, отделенная пробелами.

Опция – это особый тип аргумента (или его часть), который определяет поведение, введенной в командной строке, команды.

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

Рассмотрим следующую команду:

$ ls -l -s -k /var/log

В этом примере кроме командыlsв командной строке ей передаются пять различных аргументов:

    ls: имя выполняемой команды; -l: включается подробный формат вывода информации о файлах в списке; -s: выводит размер каждого файла из списка; -k: выводит размер файла в килобайтах.

/var/log: параметр, который предоставляет для выполняемой команды дополнительную информацию (путь к директории, для которой необходимо получить список, содержащихся в ней файлов).

Обратите внимание, что если у вас есть несколько опций в одной командной строке, то вы можете объединить их в один аргумент следующим образом:

$ ls -lsk /var/log

Теперь у нас всего три аргумента:

    ls: имя команды, которую мы выполняем; -lsk: три опции, которые вы хотите включить (комбинация-l,-sи-k); /var/log: параметр, который предоставляет для выполняемой команды дополнительную информацию (путь к директории, для которой необходимо получить список, содержащихся в ней файлов).

Cli Python. Выполняйте свои скрипты Python, как команды bash

Написание скриптов Python для создания интерфейсов командной строки (CLI) — широко используемый метод для DevOps и бэкенд разработки.

Ключом к реализации CLI в Python является встроенный модульargparse. Он предоставляет все необходимые функции и позволяет использовать скрипт Python в качестве командыbash.

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

1. Запускаем базовый интерфейс командной строки с модулем argparse

Прежде всего, давайте создадим файл с именемtest.pyи сделаем простой парсер аргументов:

import argparse parser = argparse.ArgumentParser() parser.parse_args()

После того, как мы определили этот парсер, теперь мы можем получать аргументы из командной строки. Каждый экземплярArgumentParserсодержит параметр--help(или-hкачестве ярлыка) для вывода полезной информации.

$ python test.py --help

usage: test.py

optional arguments: -h, --help show this help message and exit

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

$ python test.py 9

usage: test.py

test.py: error: unrecognized arguments: 9

2. Определяем позиционные аргументы

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

Например, командаcpимеет два позиционных аргумента:

$ cp source_file dest_file

source_fileуказывает источники копируемого файла. И аргументdest_fileуказывает место для копирования файла.

Мы также можем определить позиционный аргумент для нашего интерфейса командной строки Python:

import argparse parser = argparse.ArgumentParser() parser.add_argument("num", type=int) args = parser.parse_args() print(args.num**2)

Как видно из приведенного выше кода, мы определили имя аргумента какnumи указали его тип какint.

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

$ python test.py 9

81

3. Добавляем больше полезной информации и описание

Как и многие команды Linux, хороший интерфейс командной строки должен предоставлять пользователям достаточно информации с помощью опции--help.

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

import argparse parser = argparse.ArgumentParser(prog='get_square',description='A CLI to calculate the square of an integer.') parser.add_argument("num", type=int, help='An integer that needs to get the square value.') args = parser.parse_args() print(args.num**2)

Как показано выше, мы добавили информацию о программе и описании в экземплярArgumentParser, чтобы дать ему имя и подробное описание. Кроме того, мы дали функцииadd_argument()справочное сообщение, чтобы наши пользователи знали, для чего нужен этот аргумент.

Теперь давайте снова посмотрим на вывод опции-h:

$ python test.py -h

usage: get_square num

A CLI to calculate the square of an integer.

positional arguments:

num An integer that needs to get the square value.

optional arguments:

-h, --help show this help message and exit

Это удобнее и информативнее, не правда ли? :)

4. Определяем необязательные аргументы

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

Python командная строка. Использование командной строки интерпретатора ¶

Откройте окно терминала (как было описано в главе Установка ) и запустите интерпретатор Python, введя командуpython3и нажавEnter.

Пользователи Windows могут запустить интерпретатор в командной строке, если установили переменнуюPATHнадлежащим образом. Чтобы открыть командную строку в Windows, зайдите в меню "Пуск" и нажмите "Выполнить…". В появившемся диалоговом окне введите "cmd" и нажмитеEnter; теперь у вас будет всё необходимое для начала работы с python в командной строке DOS.

Если вы используете IDLE, нажмите "Пуск" --> "Программы" --> "Python 3.0" --> "IDLE (Python GUI)".

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

Теперь введитеprint('Hello World')и нажмите клавишуEnter. В результате должны появиться слова "Hello World".

Вот пример того, что вы можете увидеть на экране, если будете использовать компьютер с Mac OS X. Информация о версии Python может отличаться в зависимости от компьютера, но часть, начинающаяся с приглашения (т. е. от>>>и далее) должна быть одинаковой на всех операционных системах.

$ python3 Python 3.3.0 (default, Oct 22 2012, 12:20:36) on darwin Type "help", "copyright", "credits" or "license" for more information. >>> print('hello world') hello world >>>

Обратите внимание, что Python выдаёт результат работы строки немедленно! Вы только что ввели одиночный "оператор" Python.printиспользуется для того, чтобы (что неудивительно) напечатать любое переданное в него значение. В данном случае мы передали в него текст "Hello World", который и был напечатан на экране.

Как выйти из командной строки интерпретатора

Если вы используете IDLE или оболочку GNU/Linux или BSD, вы можете выйти из командной строки интерпретатора нажатиемCtrl-Dили введя командуexit()(примечание: не забудьте написать скобки, "()"), а затем нажав клавишуEnter. Если вы используете командную строку Windows, нажмитеCtrl-Z, а затем нажмите клавишуEnter.

Python работа с командной строкой Windows. Execute a Command Prompt Command from Python

Need to execute a Command Prompt command from Python?

If so, depending on your needs, you may use either of the two methods below to a execute a Command Prompt command from Python:

(1) CMD /K – execute a command and then remain:

import os os.system('cmd /k "Your Command Prompt Command"')

(2) CMD /C – execute a command and then terminate:

import os os.system('cmd /c "Your Command Prompt Command"')

Still not sure how to apply the above methods in Python?

Let’s then review few examples to better understand how to execute a Command Prompt command from Python.

Methods to Execute a Command Prompt Command from Python

Method 1 (CMD /K): Execute a command and then remain

To see how to apply the first method in practice, let’s review a simple example where we’ll execute a simple command in Python to:

  • Display the current date in the Command Prompt
  • The Command Prompt will remain opened following the execution of the command

You may then apply the following code in Python to achieve the above goals:

import os os.system('cmd /k "date"')

Once you run the code in Python, you’ll get the date in the command prompt:


Enter the new date: (mm-dd-yy)

Now what if you want to execute multiple command prompt commands from Python?

If that’s the case, you can insert the ‘&’ symbol (or other symbols, such as ‘&&’ for instance) in between the commands.

For example, what if you want to display all the characters in the command prompt in green and display the current date?

You can then use the following syntax in Python:

import os os.system('cmd /k "color a & date"')

You’ll now see the current date displayed in green:


Enter the new date: (mm-dd-yy)

Note that for more complex commands, you may find it useful to run a batch file from Python .

Method 2 (CMD /C): Execute a command and then terminate

For this method, you can execute the same commands as reviewed under the first method, only this time the Command Prompt will be closed following the execution of the commands.

For example, you may apply the following code in Python to change the color of all characters to green:

import os os.system('cmd /c "color a"')

In this case, the command will still get executed, but you may not be able to see it on your monitor.

Python флаги командной строки. sys-Параметры и функции,специфичные для системы

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

sys.abiflags

В системах POSIX, где Python был собран со стандартным скриптомconfigure, он содержит флаги ABI, как указано в PEP 3149 .

Изменено в версии 3.8: Флаги по умолчанию стали пустой строкой ( флагmдля pymalloc был удален).

Новинка в версии 3.2.

Добавить вызываемую ловушку в список активных ревизионных ловушек для текущего (под) интерпретатора.

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

Вызовсам вызовет событие аудита с именемsys.addaudithookбез аргументов. Если какие-либо существующие перехватчики вызывают исключение, производное от, новый перехватчик не будет добавлен, а исключение подавлено. В результате вызывающие абоненты не могут предполагать, что их ловушка была добавлена, если они не контролируют все существующие ловушки.

См.для всех событий, вызванных CPython, и PEP 578 для первоначального обсуждения дизайна.

Новинка в версии 3.8.

Изменено в версии 3.8.1: исключения, производные отно не, больше не подавляются.

Детали реализации CPython: когда трассировка включена (см.), хуки Python отслеживаются только в том случае, если вызываемый объект__cantrace__член __cantrace__ , для которого установлено истинное значение. В противном случае функции трассировки пропустят ловушку.

Консольная графика Python. Иерархия объектов в Matplotlib

Одной из визитных карточек matplotlib является иерархия его объектов.

Если вы уже работали с вводным руководством matplotlib, вы, возможно, уже проводили вызов чего-то на подобии plt.plot() . Одна эта строка указывает на то, что график, на самом деле – это иерархия объектов Python. Под «иерархией» мы имеем ввиду, что каждый график основывается на древоподобной структуре объектов matplotlib.

Объект Figure – это самый важный внешний контейнер для графики matplotlib, который может включать в себя несколько объектов Axes. Причиной сложности в понимании может быть название: Axes (оси), на самом деле, превращаются в то, что мы подразумеваем под индивидуальным графиком или диаграммой (а не множественное число «оси», как вы можете ожидать).

Вы можете рассматривать объект Figure как похожий на ящик контейнер, содержащий один или несколько объектов Axes (настоящих графиков). Под объектами Axes, в порядке иерархии расположены меньшие объекты, такие как индивидуальные линии, отметки, легенды и текстовые боксы. Практически каждый «элемент» диаграммы – это собственный манипулируемый объект Python, вплоть до ярлыков и отметок:

Консольная графика Python. Иерархия объектов в Matplotlib

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

Консольная графика Python. Иерархия объектов в Matplotlib