Python 命令行神器 Click(一)快速上手
简介
Click 是 Python 的一个第三方库,它只需要很少的代码就能以可组合的方式创建漂亮的命令行工具。 这是 “命令行界面创建工具库”。 它具有高度可配置性,但具有开箱即用的合理默认值。
- 命令的任意嵌套
- 自动生成帮助信息
- 支持在运行时子命令的延迟加载
安装
1 | pip install click |
基础示例
1 | # ./hello.py |
然后我们在控制台中查看:
1 | $ python hello.py |
click 是基于装饰器的。在上述示例中的 ① 行,我们在函数上使用 click.command() 装饰器来将该函数变成一个命令行工具。注意在程序的 ② 行,我们使用了了 click.echo() 函数,它等价于 print,不过它的参数更丰富:
1 | click.echo(message=None, file=None, nl=True, err=False, color=None) |
如上,color 可以定义打印颜色,让我们的输出更美观。详情请查看官网文档 click.echo
嵌套命令
现实中我们的命令行程序可能要实现好多功能,那么单纯的用一个指令带一堆选项或者参数的方式可能不够用,这是我们可以用 click.group() 定义嵌套命令来解决。然后我们用 add_command 函数,将子命令绑定到嵌套命令主函数上:
1 | import click |
在控制台中运行代码:
1 | $ python .\cli.py --help |
添加参数
我们可以用 option() 和 argument() 装饰器给命令行程序添加参数。
1 | import click |
然后我们在命令行中运行:
1 | $ python hello.py --help |
我们使用 @click.option 定义命令行的参数:
- 在
option函数第一个参数中定义--count命令行选项名。 - 在
option函数第二个参数中定义-c命令行短选项名。 default定义参数的默认值type定义参数的类型help定义命令的帮助信息
详情,请查看文档 Options
安装
对上面编写代码,文件末尾有一个需要有个运行块,如下所示:
1 | if __name__ == '__ main__': |
如传统上的一个独立 Python 文件。使用 click,您可以继续这样做,但有更好的方法通过 setuptools。
有两个主要(以及更多)原因:
- 第一个原因是 setuptools 自动为 Windows 生成可执行包装器,因此您的命令行实用程序也可以在 Windows 上运行。
- 第二个原因是
setuptools脚本在 Unix 上使用virtualenv,而不必激活virtualenv。 这是一个非常有用的概念,允许您将所有需求的脚本捆绑到virtualenv中。
Click 非常适合使用它,实际上其他文档(官网文档其他部分)将假设您正在通过 setuptools 编写应用程序。
我强烈建议您在阅读其余部分之前先查看 Setuptools Integration 章节,因为示例假设您将使用 setuptools。