![5f637cd0898a4ad29a2609635cbad6ad.png](https://i-blog.csdnimg.cn/blog_migrate/18d8d9c121875911ecda0e0d6d8e5aa6.jpeg)
导读:本文介绍命令行库Click的基本使用方法,约1800字,正常读完需要12~15分钟。
功能
Click是一个Python"命令行接口创建工具包",通过Click .command()修饰函数,可以将其变成click命令行工具。
安装
conda install -c conda-forge click
或pip install click
示例:
1. 单函数
![80573deefad7d78b4b432e18e0f584fe.png](https://i-blog.csdnimg.cn/blog_migrate/0adb8da8bb30bfc508ffb19db7a13f36.jpeg)
这里的click.echo()可以理解为print()
2. 多函数
Commands可以附加到Group上,以实现同时将多个函数转为命令行工具
![661d3acf965521fa48af158111c07e1e.png](https://i-blog.csdnimg.cn/blog_migrate/d30bbd93ff62bfb54065998475b42908.jpeg)
3. 添加参数
可以通过option()和argument()两种方式添加命令行参数,参考下面这个示例:
![5adfb3eab589b827d06bd0161d5d6848.png](https://i-blog.csdnimg.cn/blog_migrate/f57f234291e47d85d5fb565fe8072322.jpeg)
可以简单理解为:option()传递可选参数;argument()传递位置参数。
常用参数选项详解
1. option()
a. 选项名称
@click.option('-s', '--string-to-echo', 'string'),-s为命令行短选项,'--string-to-echo'为命令行长选项,'string'为脚本内变量名。没有指定脚本内变量名,则优先使用命令行长选项。(注意,长选项中的-在脚本中会自动替换为_,即脚本中变量为string_to_echo)
b. 默认值设定
@click.option('--n', default=1)。
c. 变量类型
@click.option('--n', type=int) ,如果给定默认值,则变量的类型由默认值决定;如果没有给定默认值,也没有显示地指明类型,变量被识别为字符串。
d. 是否必须
@click.option('--n', required=True, type=int) ,required为真,则该变量必须在命令行给出
e. 在help信息中打印默认值
@click.option('--n', default=1, show_default=True)
f. 单个参数传入多个值
第一种方法:指定nargas=传递个数,@click.option('--pos', nargs=2, type=float),python example –pos 1 2将传入两个数,脚本中pos识别为元组(1.0, 2.0);
第二种方法:指定type为元组,@click.option('-- pos', type=(str, int))
第三种方法:重复命令行选项@click.option('--pos', multiple=True),python example.py --pos 1 --pos 2 (参考c,两个都识别为字符串)
g. 计数
@click.option('-v', '--verbose', count=True)。python example -vvv (脚本中verbose=3)
h. 布尔值
@click.option('--shout', is_flag=True)。出现—shout则脚本中shout变量为真,否则为假
i. 取值范围
字符串:type=click.Choice(['MD5', 'SHA1'], case_sensitive=False,不区分大小写
整数:type=click.IntRange(0, 20, clamp=True),clamp为真时,给定值超过范围则自定修改为最小值/最大值,为假则报错
浮点数:type=click. FloatRange (0, 20, clamp=True)
j. 获取环境变量
@click.option('--username', envvar='USERNAME') ,multiple=True可以获取多个值,linux上以:划分。(不推荐组合前缀组合那种方式)
2. argument()
a. 传递一个位置参数
@click.argument('filename')
b. 指定参数个数
@click.argument('src', nargs=2).nargs为-1表示接收所有参数
c. 文件参数
@click.argument('input', type=click.File('rb')) click.File()可以对文件进行一些处理,如判打开等;"-"可用于表示默认设备,即屏幕
d. 路径参数
@click.argument('filename', type=click.Path(exists=True))
e. 环境变量
@click.argument('src', envvar='SRC')
其他复杂操作请自行阅读官方文档。
最后,改写Argparse:一个具体案例教会你python命令行参数解析一文中的接口
![403d9679ff48a4306a5a844dbb07edcb.png](https://i-blog.csdnimg.cn/blog_migrate/3cb76b153c417a0e60cd5e88a3713b72.jpeg)
拓展阅读:
python命令行解析库Fire简介