hi,你好!欢迎访问本站!登录
本站由网站地图腾讯云宝塔系统阿里云强势驱动
当前位置:首页 - 教程 - 杂谈 - 正文 君子好学,自强不息!

人人都说好用的 Python 敕令行库:click

2019-11-18杂谈搜奇网25°c
A+ A-



作者:HelloGitHub-Prodesire

HelloGitHub 的《解说开源项目》系列,项目地点:https://github.com/HelloGitHub-Team/Article

一、媒介

在本系列前面几篇文章中,我们离别引见了 argparsedocopt 的主要功用和用法。它们各具特色,都能精彩地完成敕令行使命。argparse 是面向历程的,须要先设置剖析器,再定义参数,再剖析敕令行,末了完成营业逻辑。而 docopt 先用声明式的语法定义出参数,再历程式地剖析敕令行和完成营业逻辑。在一些人看来,这些体式格局都不够文雅。

而本日要引见的 click 则是用一种你很熟知的体式格局来玩转敕令行。敕令行顺序本质上是定义参数和处置惩罚参数,而处置惩罚参数的逻辑一定是与所定义的参数有关联的。那可不能够用函数和装潢器来完成处置惩罚参数逻辑与定义参数的关联呢?而 click 恰好就是以这类体式格局来运用的。

本系列文章默许运用 Python 3 作为诠释器举行解说。
若你仍在运用 Python 2,请注意两者之间语法和库的运用差别哦~

二、引见

click 是一个以尽量少的代码、以组合的体式格局建立幽美的敕令行顺序的 Python 包。它有很高的可设置性,同时也能开箱即用。

它旨在让编写敕令行东西的历程既疾速又风趣,还能防备因为没法完成预期的 CLI API 所发生挫败感。它有以下三个特性:

  • 恣意嵌套敕令
  • 自动生成协助
  • 支撑运行时耽误加载子敕令

三、疾速最先

3.1 营业逻辑

起首定义营业逻辑,是否是感觉到有些难以置信呢?

不管是 argparse 照样 docopt,营业逻辑都是被放在末了一步,但 click 倒是放在第一步。细想一想 click 的这类体式格局才更相符人的头脑吧?不管用什么敕令行框架,我们终究体贴的就是完成营业逻辑,别的的能省则省。

我们以官方示例为例,来引见 click 的用法和哲学。假定敕令行顺序的输入是 namecount,功用是打印指定次数的名字。

那末在 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.echoprint 的作用类似,但功用越发壮大,能处置惩罚好 Unicode 和 二进制数据的状况。

3.2 定义参数

很显然,我们须要针对 countname 来定义它们所对应的参数信息。

  • 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):
    ...

在上面的示例中:

  • 运用装潢器的体式格局,即定义了参数,又将之与处置惩罚逻辑绑定,这真是文雅。和 argparsedocopt 比起来,就少了一步绑定历程
  • 运用 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 的体式格局让敕令行顺序的完成变得越发文雅和好用外,还供应了比 argparsedocopt 都要壮大的功用。在接下来几节中,我们将会逐渐揭开它的面纱。

『解说开源项目系列』——让对开源项目感兴趣的人不再怕惧、让开源项目的发起者不再孑立。随着我们的文章,你会发明编程的兴趣、运用和发明介入开源项目云云简朴。迎接留言联络我们、到场我们,让更多人爱上开源、孝敬开源~

  选择打赏方式
微信赞助

打赏

QQ钱包

打赏

支付宝赞助

打赏

  移步手机端
人人都说好用的 Python 敕令行库:click

1、打开你手机的二维码扫描APP
2、扫描左则的二维码
3、点击扫描获得的网址
4、可以在手机端阅读此文章
未定义标签

本文来源:搜奇网

本文地址:https://www.sou7.cn/282293.html

关注我们:微信搜索“搜奇网”添加我为好友

版权声明: 本文仅代表作者个人观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。请记住本站网址https://www.sou7.cn/搜奇网。

发表评论

选填

必填

必填

选填

请拖动滑块解锁
>>