Тратьте меньше времени на документирование и больше времени на программирование. Мы рассмотрим пару простых приложений, которые используют библиотеку Python Fire для создания автоматизированных интерфейсов командной строки.
Это самая горячая вещь, которую можно выбросить от Google для сообщества разработчиков открытого исходного кода со времен TensorFlow [1].
Эээээ, это не совсем так популярно ...
Что мне интересно в библиотеке глубокого обучения TensorFlow, так это то, что на момент ее выпуска на рынке уже было несколько популярных библиотек глубокого обучения (а именно, Theano, Caffe и Torch). Тем не менее, TensorFlow сразу и постоянно вызывал интерес, проверьте активность stackoverflow:
Fire похож на в том смысле, что для программистов на Python уже существует множество отличных инструментов для автоматизации интерфейсов командной строки (CLI) [2]. Будет интересно посмотреть, примет ли Fire значительная часть пользователей.
Обновление: после использования Fire в течение нескольких недель и сравнения с другими параметрами, такими как Click, я понял, что Fire больше подходит для быстрой разработки, поскольку в нем отсутствуют многие функции других интерфейсов командной строки. Однако новые функции разрабатываются. Первоначальный выпуск содержал IPython в качестве зависимости, что приводило к длительному времени загрузки даже для простых скриптов, но теперь это необязательная зависимость!
Простое приложение с Fire
Огонь можно установить с помощью pip:
pip install fire
Документация есть на гитхабе. Он содержал проницательную записку:
Мы можем сделать это, вызвав fire.Fire(my_object)
, где my_object
может быть функцией, классом или другим объектом.
А теперь пора сделать приложение. Это будет генератор случайной выборки. Функция random_sample
будет вычислена черезFire
. Как мы увидим, значения, возвращаемые функцией, печатаются.
Просто покажи мне код.
Наша random_sample
функция передается в метод Fire
, который автоматически создает аргументы командной строки для параметров функции. Вместо написания инструкций по использованию для сценария пользователь может получить указание запустить python main.py -- --help
, что приведет к следующему результату:
Вот пример использования скрипта:
>>> python main.py 'Bohr, Schrodinger, Einstein, Dirac' --num-samples 4 --seed 1905 Choices: ('Bohr', 'Schrodinger', 'Einstein', 'Dirac') Genreating 4 samples Random seed: 1905 Samples: Dirac Einstein Dirac Schrodinger
Кстати, если вы хотите запустить скрипт как исполняемый файл (т.е.
./main.py
вместоpython main.py
), добавьте вверху строку, подобную этой:
#!/usr/bin/env python
и дайте скрипту разрешение на запуск с помощью команды
chmod +x main.py
Интерактивный режим
Моя любимая особенность Fire заключается в том, что он может бросить вас в среду IPython REPL. Все, что вам нужно сделать, это добавить -- --interactive
в конец вызова скрипта. Например:
>>> python main.py 'Bohr, Schrodinger, Einstein, Dirac' --num-samples 4
--seed 1905 -- --interactive
1. Запуск main.py
2. Распечатать вывод из main.py
3. Обратите внимание на загруженные модули и объект?
4. Запуск интерпретатора IPython.
5. Распечатка результатов.
Данные, возвращенные при вызове функции, теперь хранятся в памяти вместе с самой функцией. Ниже мы получаем строку документации, а затем запускаем новое вычисление выборки.
Аргументы выбора передаются в виде кортежа, тогда как они будут вводиться в виде строки с использованием интерфейса командной строки:
>>> python main.py 'Bohr, Schrodinger' --num-samples 2 --seed 3
Стрельба из класса
Вы можете передать любой объект модулю Fire
, и библиотека создаст интерфейс командной строки. Вот пример использования класса.
Наш класс WikiPage
запрашивает страницу википедии, а модуль get_html_element
попытается найти элемент html на странице (примечание: всегда используйте библиотеку синтаксического анализа, такую как BeautifulSoup, для поиска элементов html, а не регулярное выражение, как я!).
Давайте посмотрим на использование:
Передача аргумента страницы приводит к другому полезному сообщению об использовании:
Например, мы можем получить код статуса:
>>> python main.py --page https://en.wikipedia.org/wiki/History_of_quantum_mechanics status-code 200
Или сгенерируйте случайную страницу и проверьте URL:
>>> python main.py url https://en.wikipedia.org/wiki/Parasicydium_bandama
Мы также можем вызывать модули прямо из командной строки:
Например:
>>> python main.py --page https://en.wikipedia.org/wiki/History_of_quantum_mechanics get-html-element title History of quantum mechanics - Wikipedia
Удачной автоматизации!
Спасибо за прочтение. Вы можете найти меня в твиттере @ agalea91
[1] Объявление о выпуске Google Fire
[2] Другие библиотеки CLI для python