Python 命令行神器 Click

在Python开发和测试过程中主要有两种模式可以选择:脚本模式、命令行模式。在代码的开发和调试过程中使用脚本模式还是很方便的,尤其接触pycharm、eclipse这类强大的IDE,或者配合vs code这种综合的文本编辑器。但是如果使用纯文本编辑器,或者是在做整个系统开发时,与其他模型进行接口调用时,命令行模式就显得非常重要了。目前有很多热门的命令行工具,本文会一一介绍一下,并且重点介绍一下最近发现的一款命令行神器Click。

下面要介绍的就是本文的主角Click,这款工具是用flask的开发团队pallets进行开发,目前在github已经7.6k+star,受欢迎程度可见一斑,

Click的开发初衷就是使用最少的代码,以一种可组合的方式创建漂亮的命令行接口。 它的目的是使编写命令行工具的过程快速而有趣,同时防止由于无法实现预期的CLI API而导致的任何问题。

Click主要有以下3个亮点:

# 命令的任意嵌套 # 自动帮助页面生成 # 支持在运行时延迟加载子命令

安装

$ pip install click

Click支持Python 3.4和更新版本、Python 2.7和PyPy。

首先先来一个例子,

import click​
​
@click.command()
@click.option("--name", default="li", help="your name")
@click.option("--age", default=26, help="your age")
def hello_world(name, age):
        click.echo(name)
        print(age)

hello_world()

命令行调用:

$ python test.py --name ll --age 27

​ 输出

ll
27

可以看出,上述主要用了click的3个方法,分别是,

command
option
echo

这3个方法在Click工具中至关重要,除此之外还有其他的方法,它们的功能分别是,

方法功能

# command:用于装饰一个函数,使得该函数作为命令行的接口,例如上述装饰hello_world # option:用于装饰一个函数,主要功能是为命令行添加选项 # echo:用于输出结果,由于print函数在2.x和3.x之间存在不同之处,为了更好的兼容性,因此提供了echo输出方法 # Choice:输入为一个列表,列表中为选项可选择的值

把上述程序的帮助信息输出,

$ python test.py --help
​
Usage: test.py [OPTIONS]
​
Options:
  --name TEXT    your name
  --age INTEGER  your age
  --help         Show this message and exit.

在示例程序中,对于option只使用了default、help两个属性,除此之外option还有其他的属性选项,它们的功能如下,

属性描述

  1. default:给命令行选项添加默认值

  2. help:给命令行选项添加帮助信息

  3. type:指定参数的数据类型,例如int、str、float

  4. required:是否为必填选项,True为必填,False为非必填

  5. prompt:在命令行提示用户输入对应选项的信息

  6. nargs:指定命令行选项接收参数的个数,如果超过则会报错

除此之外,Click还提供了group方法,该方法可以添加多个子命令,

import click    ​
​
@click.group()
def first():
        print("hello world")
​
@click.command()
@click.option("--name", help="the name")
def second(name):
        print("this is second: {}".format(name))
​
@click.command()
def third():
        print("this is third")
​
first.add_command(second)
first.add_command(third)
​
first()

调用子命令second,

$ python test.py second --name hh

​ 输出:

hello world
this is second: hh