Python命令行库click的具体使用

 更新时间:2022年06月29日 09:50:54   作者:编程学习网  
本文主要介绍了Python命令行库click的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

一、前言

今天要介绍的 click 则是用一种你很熟知的方式来玩转命令行。命令行程序本质上是定义参数和处理参数,而处理参数的逻辑一定是与所定义的参数有关联的。那可不可以用函数和装饰器来实现处理参数逻辑与定义参数的关联呢?而 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命令行库click的具体使用的文章就介绍到这了,更多相关Python命令行库click内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 基于pandas数据清洗的实现示例

    基于pandas数据清洗的实现示例

    数据清洗是数据科学和数据分析中非常重要的一个步骤,本文主要介绍了基于pandas的数据清洗,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-07-07
  • Python中变量交换的例子

    Python中变量交换的例子

    这篇文章主要介绍了Python中变量交换的例子,Python中的变量交换不需要临时变量,一个等号即可实现变量的交换,非常方便,需要的朋友可以参考下
    2014-08-08
  • Windows下python2.7.8安装图文教程

    Windows下python2.7.8安装图文教程

    这篇文章主要为大家详细介绍了Windows下python2.7.8安装图文教程,在安装过程中出现“python不是内部或外部命令”提示的解决方法,感兴趣的小伙伴们可以参考一下
    2016-05-05
  • 执行Django数据迁移时报 1091错误及解决方法

    执行Django数据迁移时报 1091错误及解决方法

    这篇文章主要介绍了执行Django数据迁移,报错 1091,需要的朋友可以参考下
    2019-10-10
  • python实现web应用框架之增加动态路由

    python实现web应用框架之增加动态路由

    这篇文章主要介绍web应用框架如何添加动态路由,在我们编写的框架中,我们添加动态路由,是使用了正则表达式,同时在注册的时候,需要注明该路由是请求路由,文中有详细的代码示例,需要的朋友可以参考下
    2023-05-05
  • Numpy数组的广播机制的实现

    Numpy数组的广播机制的实现

    这篇文章主要介绍了Numpy数组的广播机制的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • Python标准库re的使用举例(正则化匹配)

    Python标准库re的使用举例(正则化匹配)

    正则表达式re是内置函数,通过一定的匹配规则获取指定的数据,下面这篇文章主要给大家介绍了关于Python标准库re的使用举例,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-10-10
  • Python数学建模StatsModels统计回归之线性回归示例详解

    Python数学建模StatsModels统计回归之线性回归示例详解

    这篇文章主要为大家介绍了Python数学建模中StatsModels统计回归之线性回归的示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2021-10-10
  • 使用openCV去除文字中乱入的线条实例

    使用openCV去除文字中乱入的线条实例

    这篇文章主要介绍了使用openCV去除文字中乱入的线条实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • python神经网络TensorFlow简介常用基本操作教程

    python神经网络TensorFlow简介常用基本操作教程

    这篇文章主要介绍了python神经网络入门TensorFlow简介常用基本操作教程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2021-11-11

最新评论