大家都说好用的 Python 命令行库:click

2019-11-08 18:55| 发布者: 汇众注册平台| 查看: |

在本系列前面几篇文章中,咱们分辨引见了 argparse 和 docopt 的首要功能和用法。它们各具特质,都能出色地完结命令行任意。argparse 是面向过程的,须要先设置解析器,再定义参数,再解析命令行,最终实现业务逻辑。而 docopt 先用申明式的语法定义出参数,再过程式地解析命令行和实现业务逻辑。在一点儿人看来,这些措施都不够优雅。

大家都说好用的 Python 命令行库:click

而今天要引见的 click[2] 则是用一种你很熟知的措施来玩转命令行。命令历程序本色上是定义参数和处理参数,而处理参数的逻辑一定是与所定义的参数有关联的。那可不可以用函数和装潢器来实现处理参数逻辑与定义参数的关联呢?而 click 恰好就是以这种措施来利用的。

本系列文章默认利用 Python 3 作为阐明器进行解说。若你仍在利用 Python 2,请注意两者之间语法和库的利用差异哦~

二、引见click

是一个以尽可能少的代码、以组合的措施创建幽美的命令历程序的 Python 包。它有很高的可配置性,同时也能开箱即用。

它旨在让编辑命令行工具的过程既快速又有趣,还能防止因为无法实现预期的 CLI API 所产生挫败感。它犹如下三个特色:

恣意嵌套命令

主动生成帮忙

支撑运行时延迟加载子命令

三、快速开端

3.1 业务逻辑

首先定义业务逻辑,是不是感到到有些难以置信呢?

不管是 argparse 还是 docopt,业务逻辑都是被放在最终一步,但 click 却是放在第一步。细想想 click 的这种措施才更符合人的思维吧?不管用什么命令行框架,咱们最后关心的就是实现业务逻辑,其它的能省则省。

咱们以官方示例为例,来引见 click 的用法和哲学。假设命令历程序的输入是 name 和 count,功能是打印指定次数的名字。

那么在 hello.py 中,很轻易写出如下代码:

def hello(countname): 

    """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(countname): 

    ... 

在上面的示例中:

利用装潢器的措施,即定义了参数,又将之与处理逻辑绑定,这真是优雅。和 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(countname): 

    """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 薪资竟然垫底。。。

新版Kite:实时补全代码,Python之父都发声力挺!

Python数据分析必知必会:TGI指数

Python几行代码,就能预计未来孩子的长相?强大的人工智能

这3个高等Python函数,不能再被你疏忽了!

<
>
汇众平台拥有强大的财团支持,信誉与资金有保障!本站为您提供汇众注册、汇众登录、汇众手机APP客户端下载等。欢迎您的加入,24小时客服在线服务!目前旗下有汇众平台有限公司、汇众平台科技有限公司、汇众平台设备有限公司;致力于建成产品丰富的娱乐业航母!

联系我们

(服务时间:9:00-18:00)

4837899@qq.com

在线咨询 官方微信官方微信

部门热线

前   台:
业务部:
客服部:
技术部:
人事部:

网站建设 微信开发 售后服务 咨询电话 返回顶部
返回顶部