- PVSM.RU - https://www.pvsm.ru -
Философы говорят, что людей нужно оценивать не по тому, как высоко они могут забраться, а по тому, как низко они могут пасть.
В мире есть много прекрасных разработчиков, которые могут выдавать эффектные алгоритмы, изящные архитектуры и прекрасный код. Но эти же программеры берут и пишут весьма посредственно организованный код какого-нибудь маленького консольного скрипта для рассчета аналитики или патча данных в базе. Никакой разбивки на классы и функции, корявая передача аргументов в функции, примитивный вывод малопонятной информации с помощью print()
Сегодня мы поговорим о том, как сделать лучше программы, на которые большинству плевать — одноразовые консольные утилитки и скрипты.
Библиотека [1] от второй по значимости в мире корпорации добра — Facebook. Тамошних инженеров тоже порядком утомил хаос в консольных приложениях, поэтому они решили снабдить их интерактивным интерфейсом. Конечно же, текстовым.
С выводом информации в консоль у многих вообще беда. Как говорилось выше, дело часто сводится к простому выводу print()
. Читать такое, конечно, не очень удобно.
Для того, чтобы сделать отрисовку того, что происходит в программе, есть либа Termgraph [2]
Она позволяет делать такие вот картинки в терминале
Или такие, посложнее
Используя простой бар, можно показывать прогресс выполнения программы в виде красивой полоски — и это уже будет круто и куда приятней вывода непонятных значений принтом.
Скрипты для выполнения на удаленных машинах — отдельная боль. Конечно, мы живем в веке DevOps, когда кучи задач решаются с помощью Salt и Ansible. Но бывает и такое, что нужно регулярно логиниться на кластер удаленных тачек и выполнять там пачки команд. Для этого и есть fabric [3]
Fabric построен вокруг Paramiko [4] и вообще вы можете выполнять команды с помощтю этой низкоуровневой библиотеки общения по SSH. Но Fabric дает необходимый уровень абстракции, который позволяет делать понятным и легкоиспользуемым.
Эта либа [5] превращает простой скрипт в реально мощное консольное приложение.
Например, можно добавить строку запроса команд в текстовый интерфейс.
from prompt_toolkit import prompt
while 1:
user_input = prompt('>')
print(user_input)
А после этого можно добавить историю использованных команд, прямо как в вашем терминале.
from prompt_toolkit import prompt
from prompt_toolkit.history import FileHistory
while 1:
user_input = prompt('>',
history=FileHistory('history.txt'),
)
print(user_input)
А можно сделать автоподсказки строк из истории ввода.
from prompt_toolkit import prompt
from prompt_toolkit.history import FileHistory
from prompt_toolkit.auto_suggest import AutoSuggestFromHistory
while 1:
user_input = prompt('>',
history=FileHistory('history.txt'),
auto_suggest=AutoSuggestFromHistory(),
)
print(user_input)
И научить автоподсказки определенным предустановленным командам.
from prompt_toolkit import prompt
from prompt_toolkit.history import FileHistory
from prompt_toolkit.auto_suggest import AutoSuggestFromHistory
from prompt_toolkit.contrib.completers import WordCompleter
SQLCompleter = WordCompleter(['select', 'from', 'insert', 'update', 'delete', 'drop'],
ignore_case=True)
while 1:
user_input = prompt('SQL>',
history=FileHistory('history.txt'),
auto_suggest=AutoSuggestFromHistory(),
completer=SQLCompleter,
)
print(user_input)
Либа крайне простая и дает возможность сделать свой классный и полностью кастомизируемый интерфейс.
Внимательное отношение к, казалось бы, одноразовым программам позволит вам писать не код на выброс, а консольные инструменты, которые легко можно использовать повторно потом. Это экономит время и, конечно же, делает работу с вашими скриптами намного приятней.
Автор: 57uff3r
Источник [6]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/python/327260
Ссылки в тексте:
[1] Библиотека: https://github.com/facebookincubator/python-nubia
[2] Termgraph: https://github.com/mkaz/termgraph
[3] fabric: http://www.fabfile.org/
[4] Paramiko: https://www.paramiko.org/
[5] Эта либа: https://github.com/prompt-toolkit/python-prompt-toolkit
[6] Источник: https://habr.com/ru/post/463725/?utm_campaign=463725&utm_source=habrahabr&utm_medium=rss
Нажмите здесь для печати.