Python Fire Пакет обеспечивает способ разработки интерфейса командной строки (CLI) в Python, автоматически с очень минимальным дополнительным кодом. Пакет исходит от Google, но это «Не официальный продукт Google» Отказ
Поэзия Является зрелым и современным способом управления проектом Python и его зависимостями. Возможно, вы наслаждаетесь чтением Мое введение в поэзию а также краткое Объяснение использования поэзии для выставления сценариев командной строки В вашем проекте.
Я также задокументировал, используя поэтиграфию одним щелчком мыши, другой пакет Python для генерации CLI. Там, где это необходимо, информация о настройке поэзии в этой статье очень похожа на настройку поэзии в этом.
Создайте проект и добавьте модуль
poetry new --name greet --src firegreet cd firegreet
Добавить файл под названием приветствовать
в SRC/Greet
подкаталог, со следующим содержанием:
"""Send greetings.""" import time import arrow def greet(tz, repeat=1, interval=3): """Parse a timezone and greet a location a number of times.""" for i in range(repeat): if i > 0: # no delay needed on first round time.sleep(interval) now = arrow.now(tz) friendly_time = now.format("h:mm a") seconds = now.format("s") location = tz.split("/")[-1].replace("_"," ") print(f"Hello, {location}!") print(f"The time is {friendly_time} and {seconds} seconds.\n")
Установка зависимостей
Нам нужно Стрелка и будет использовать Python Fire Итак, они оба должны быть добавлены сейчас:
poetry add arrow fire
Добавьте конечную точку скрипта в pyproject.toml
Выставить приветствовать
Функция как скрипт командной строки, добавьте tool.poetry.kcripts
Раздел для pyproject.toml
Отказ
[tool.poetry.scripts] greet = "greet.greet:greet"
Это устанавливает приветствовать
Сценарий, чтобы посмотреть в приветствовать
Пакет для приветствовать
Модуль и использование приветствовать
функция.
Как только я нахожу хорошее имя, я использую его для всего. То, что в любом случае говорит мой сын Даррил. Его брат Даррил согласен.
Теперь, когда сценарий установлен, установите пакет и скрипт с помощью
poetry install
Давайте запустим недавно установленный сценарий:
$ poetry run greet Traceback (most recent call last): File "", line 1, in TypeError: greet() missing 1 required positional argument: 'tz'
Лучшие заложенные планы …
Использование [Fire] для разбора аргументов командной строки
Чтобы сделать эту работу, нам нужно определить аргументы командной строки и пройти теми, как параметры для приветствовать
функция.
Это именно то, что Python Fire может сделать автоматически. Однако нам нужно корректировать нашу стратегию.
Во-первых, Импорт огня
и добавьте простую функцию обработки команды в код. Результат должен прочитать что-то вроде этого:
"""Send greetings.""" import time import arrow import fire def greet(tz, repeat=1, interval=3): """Parse a timezone and greet a location a number of times.""" for i in range(repeat): if i > 0: # no delay needed on first round time.sleep(interval) now = arrow.now(tz) friendly_time = now.format("h:mm a") seconds = now.format("s") location = tz.split("/")[-1].replace("_", " ") print(f"Hello, {location}!") print(f"The time is {friendly_time} and {seconds} seconds.\n") def cli(): fire.Fire(greet)
Что CLI ()
Функция – это все, что мы добавили, кроме Импорт огня
Отказ
CLI ()
Функция, не приветствовать ()
, должен быть скрипт конечной точки, так pyproject.toml
должен иметь незначительную корректировку:
[tool.poetry.scripts] greet = "greet.greet:cli"
Теперь попробуйте Поэзия бежит приветствовать --help
Ага. Все это почти не работает. Вот как Python Fire Сияет: лень дает такую элегантность.
$ poetry run greet -r 2 -i 1 Canada/Saskatchewan Hello, Saskatchewan! The time is 4:11 am and 43 seconds. Hello, Saskatchewan! The time is 4:11 am and 44 seconds.
Теперь, когда мы проверили его, мы знаем, что это работает. Подожди … Это было не настоящее тестирование. Введите pteest Отказ
Тестирование пожарных интерфейсов Python с Pтой
Тестирование интерфейсов командной строки требует немного мысли. Не удивительно, с pteest и Python Fire Я могу продолжать лениться.
Огонь. Огонь ()
Функция также используется в тестировании. Мы можем поставить следующие тесты/Test_GreeT.py:
import fire from greet.greet import greet def test_greet_cli(capsys): fire.Fire(greet, ["Egypt"]) captured = capsys.readouterr() result = captured.out assert "Hello, Egypt!" in result
Как видно выше, Огонь. Огонь ()
Функция может принять список аргументов командной строки.
Я использовал pteest’s капсис
приспособление захватить вывод.
Делает Поэзия бежит Pteest
проходить?
Удовлетворение.
Опять же, посмотрите на аналогичные учебные пособия, связанные с использованием клика, если они заинтересованы в сравнении инструментов.
Оригинал: “https://dev.to/bowmanjd/build-a-command-line-interface-with-poetry-and-python-fire-c8b”