关于python:最好用的-Python-命令行库click

33次阅读

共计 2293 个字符,预计需要花费 6 分钟才能阅读完成。

一、前言
明天要介绍的 click[2] 则是用一种你很熟知的形式来玩转命令行。命令行程序实质上是定义参数和解决参数,而解决参数的逻辑肯定是与所定义的参数有关联的。那可不可以用函数和装璜器来实现解决参数逻辑与定义参数的关联呢?而 click 正好就是以这种形式来应用的。

本系列文章默认应用 Python 3 作为解释器进行解说。
若你仍在应用 Python 2,请留神两者之间语法和库的应用差别哦~

二、介绍
click 是一个以尽可能少的代码、以组合的形式创立柔美的命令行程序的 Python 包。它有很高的可配置性,同时也能开箱即用。

它旨在让编写命令行工具的过程既疾速又乏味,还能避免因为无奈实现预期的 CLI API 所产生挫败感。它有如下三个特点:

  • 任意嵌套命令
  • 主动生成帮忙
  • 反对运行时提早加载子命令

三、疾速开始
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.

四、小结
click 的思路非常简单,定义处理函数,通过它的装璜器来定义参数。应用装璜器的绝妙之处就在于把定义和绑定这两个步骤合为一个步骤,使得整个过程变得如丝般顺滑。

click 除了以 Pythonic 的形式让命令行程序的实现变得更加优雅和好用外,还提供了比 argparse 和 docopt 都要弱小的性能。

以上就是本次分享的所有内容,想要理解更多 python 常识欢送返回公众号:Python 编程学习圈,发送“J”即可收费获取,每日干货分享

正文完
 0