Пример кода, задействованный в этой статье, был синхронно обновлен доРепозиторий HelloGitHub-Team
Введение
В предыдущих статьях этой серии мы представилиargparse
иdocopt
Основные особенности и использование. Они характерны, могут быть хорошо сделаны заданиям командной строки.argparse
Он ориентирован на процесс, вам нужно сначала установить анализатор, затем определить параметры, затем проанализировать командную строку и, наконец, реализовать бизнес-логику. иdocopt
Параметры сначала определяются в декларативном синтаксисе, а затем анализируется командная строка и процедурно реализуется бизнес-логика. Для некоторых людей ни один из этих подходов не является достаточно элегантным.
И сегодняшнее знакомствоclickРечь идет об игре с командной строкой привычным для вас способом. Программа командной строки по существу определяет параметры и параметры обработки, и логика обработки параметров должна быть связана с определенными параметрами. Можно ли использовать функции и декораторы для связывания логики параметров обработки с определенными параметрами? иclick
Именно так и используется.
本系列文章默认使用 Python 3 作为解释器进行讲解。
若你仍在使用 Python 2,请注意两者之间语法和库的使用差异哦~
2. Введение
click— это пакет Python для создания красивых программ командной строки комбинаторным способом с минимальным количеством кода. Он легко настраивается, а также работает из коробки.
Он разработан, чтобы сделать написание инструментов командной строки быстрым и увлекательным, а также предотвратить разочарование от невозможности реализовать предполагаемый API CLI. Он имеет следующие три характеристики:
- Произвольные вложенные команды
- Автоматически созданная справка
- Поддержка ленивой загрузки подкоманд во время выполнения.
3. Быстрый старт
3.1 Бизнес-логика
Сначала определите бизнес-логику, вам не кажется немного невероятным?
либоargparse
все ещеdocopt
, бизнес-логика размещается на последнем шаге, ноclick
Но это первый шаг. подумай об этомclick
Этот способ больше соответствует человеческому мышлению, верно? Независимо от того, какой фреймворк командной строки используется, в конечном счете нас интересует реализация бизнес-логики и сохранение всего остального.
Наши официальные примеры, например, представитьclick
использование и философия. Предположим, что ввод в программу командной строкиname
иcount
, функция состоит в том, чтобы напечатать имя указанное количество раз.
затем вhello.py
, легко написать следующий код:
def hello(count, name):
"""Simple program that greets NAME for a total of COUNT times."""
for x in range(count):
click.echo('Hello %s!' % name)
Логика этого кода очень проста, просто циклcount
раз, используйтеclick.echo
Распечататьname
. в,click.echo
иprint
Он работает аналогично, но является более мощным и может хорошо обрабатывать Unicode и двоичные данные.
3.2 Определение параметров
Очевидно, нам нужноcount
иname
определить их соответствующую информацию параметров.
-
count
Соответствует параметрам командной строки--count
, тип — число, мы хотим, чтобы его значение по умолчанию было 1, когда параметр не указан -
name
Соответствует параметрам командной строки--name
, тип — строка, мы надеемся дать людям подсказку, когда параметры не указаны
использоватьclick
, можно записать так:
from click import click
@click.command()
@click.option('--count', default=1, help='Number of greetings.')
@click.option('--name', prompt='Your name',
help='The person to greet.')
def hello(count, name):
...
В приведенном выше примере:
- 使用装饰器的方式,即定义了参数,又将之与处理逻辑绑定,这真是优雅。 и
argparse
,docopt
Для сравнения, на один обязательный процесс меньше. - использовать
click.command
выражатьhello
это обработка команды - использовать
click.option
Чтобы определить параметры параметров- за
--count
Например, используйтеdefault
чтобы указать значение по умолчанию. А так как значением по умолчанию является число, что, в свою очередь, подразумевает--count
опция имеет номер типа - за
--name
Например, используйтеprompt
чтобы указать подсказку, когда опция не введена - использовать
help
указать справочную информацию
- за
Будь то способ декораторов или различные варианты поведения по умолчанию,click
Все дело в том, чтобы писать как можно меньше кода, как говорится во введении, и делать весь процесс быстрым и увлекательным.
3.3 Прочесывание кода
использоватьclick
Способ очень простой, мы суммируем приведенный выше код, чтобы иметь более четкое представление:
# hello.py
import click
@click.command()
@click.option('--count', default=1, help='Number of greetings.')
@click.option('--name', prompt='Your name',
help='The person to greet.')
def hello(count, name):
"""Simple program that greets NAME for a total of COUNT times."""
for x in range(count):
click.echo('Hello %s!' % name)
if __name__ == '__main__':
hello()
Если мы укажем времена и имена:
$ python3 hello.py --count 2 --name Eric
Hello Eric!
Hello Eric!
Если мы ничего не укажем, нам будет предложено ввести имя и выводить один раз по умолчанию:
$ python3 hello.py
Your name: Eric
Hello Eric!
Мы также можем пройти--help
Параметры для просмотра автоматически сгенерированной справочной информации:
Usage: hello.py [OPTIONS]
Simple program that greets NAME for a total of COUNT times.
Options:
--count INTEGER Number of greetings.
--name TEXT The person to greet.
--help Show this message and exit.
4. Резюме
click
Идея очень проста, определить функцию-обработчик и определить параметры через декоратор. Прелесть использования декораторов в том, что два шага определения и привязки объединены в один, что делает весь процесс плавным и шелковистым.
click
В добавок кPythonic
То, как программа командной строки стала более элегантной и простой в использовании.argparse
иdocopt
Все мощные функции. В следующих нескольких разделах мы постепенно приоткроем завесу над ним.
«Объяснение серии проектов с открытым исходным кодом»——Пусть больше не боятся люди, интересующиеся проектами с открытым исходным кодом, и пусть инициаторы проектов с открытым исходным кодом больше не остаются в одиночестве. Следите за нашими статьями, и вы откроете для себя радости программирования, насколько легко им пользоваться, и узнаете, как легко участвовать в проектах с открытым исходным кодом. Добро пожаловать, чтобы оставить сообщение, чтобы связаться с нами, присоединиться к нам, позволить большему количеству людей влюбиться в открытый исходный код и внести свой вклад в открытый исходный код~