Click 是用 Python 写的一个第三方模块,用于快速创建命令行。我们知道,Python 内置了一个 argparse 的标准库用于创建命令行,但使用起来有些繁琐,Click 相比于 argparse.
Click 的使用大致有两个步骤:
-
使用
@click.command()
装饰一个函数,使之成为命令行接口; -
使用
@click.option()
等装饰函数,为其添加命令行选项等。
import click
@click.command()
@click.option('--param', default=default_value, help='description')
def func(param):
pass
例子
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import click
@click.command()
@click.option('--c', default=1, help="input check password count")
@click.option('--pwd', prompt="your password:", help="input check password")
def checkpwd(c, pwd):
for x in range(c):
click.echo("your password:{0}".format(pwd))
if __name__ == "__main__":
checkpwd()
(upy3Env)***wshu/testModule# python demo.py
your password:: 123456
your password:123456
# click 自动生成了 "--help" 用法
(upy3Env)***wshu/testModule# python demo.py --help
Usage: demo.py [OPTIONS]
Options:
--c INTEGER input check password count
--pwd TEXT input check password
--help Show this message and exit.
再运行下制定 c 和 pwd 参数的结果
(upy3Env) *****wshu/testModule# python demo.py --c 5 --pwd wangshu123
your password:wangshu123
your password:wangshu123
your password:wangshu123
your password:wangshu123
your password:wangshu123
click.option
option 最基本的用法就是通过指定命令行选项的名称,从命令行读取参数值,再将其传递给函数。在上面的例子,我们看到,除了设置命令行选项的名称,我们还会指定默认值,help 说明等,option 常用的设置参数如下:
-
default: 设置命令行参数的默认值
-
help: 参数说明
-
type: 参数类型,可以是 string, int, float 等
-
prompt: 当在命令行中没有输入相应的参数时,会根据 prompt 提示用户输入
-
nargs: 指定命令行参数接收的值的个数
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import click
@click.command()
@click.option('--c', default=1, help="input check password count")
@click.option('--pwd', propmt="input password", help='input check password')
def test0(c, pwd):
for x in range(c):
click.echo("your password{0}".format(pwd))
@click.command()
@click.option('--rate',type=float, help="rate type >> float") # 设定类型为float
def test1(rate):
click.echo("rate:{0}".format(rate))
@click.command()
@click.option('--sex', type=click.Choice(['man','woman']))#限定值 click.Choice(seq)
def test2(sex):
click.echo("sex:{0}".format(sex))
@click.command()
@click.option('--v', nargs=2, type=int, help='function add')
@click.option('--reson', help='reson doc')
def test3(v, reson):
click.echo('add result{0}, reson{1}'.format(v[0]+v[1], reson))
if __name__ == "__main__":
test3()