Тратьте меньше времени на документирование и больше времени на программирование. Мы рассмотрим пару простых приложений, которые используют библиотеку 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

Подпишитесь на мою рассылку :)