Пример кода, задействованный в этой статье, был синхронно обновлен доРепозиторий 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Все мощные функции. В следующих нескольких разделах мы постепенно приоткроем завесу над ним.
«Объяснение серии проектов с открытым исходным кодом»——Пусть больше не боятся люди, интересующиеся проектами с открытым исходным кодом, и пусть инициаторы проектов с открытым исходным кодом больше не остаются в одиночестве. Следите за нашими статьями, и вы откроете для себя радости программирования, насколько легко им пользоваться, и узнаете, как легко участвовать в проектах с открытым исходным кодом. Добро пожаловать, чтобы оставить сообщение, чтобы связаться с нами, присоединиться к нам, позволить большему количеству людей влюбиться в открытый исходный код и внести свой вклад в открытый исходный код~