click的简单使用
click的简单使用
先通过一个简单的例子来认知一下click把
import click
@click.command()
@click.option('-p', '--port', default=('Cat', 5000), type=(str, int), help="localhost:port")
def run(port, password):
"""This is to simulate the local running port"""
click.echo("%s Run on http://127.0.0.1:%d" % port)
if __name__ == '__main__':
run()
我们来分析一下这个代码,从而入门click把
- 首先,通过装饰器
click.command()
让这个函数成为一个命令行工具 - 然后通过装饰器
click.option()
为这个函数的调用添加命令行选项-p
--port
呢就是短选项和完整选项了,我们使用命令的时候,可以用-p+待传入的参数,也可以是--port+待传入的参数default
则是设置默认参数type
用于指定传入参数的类型,在4.0版本以后,这个代替了nargs
参数,可以用来设置传入多个值,并且规定了类型。help
则是提示语,当使用--help
的时候可以查看开发者的帮助文档
- 设置了选项之后,我们需要在函数的形参列表中写上相应的参数名,方便之后的使用
- 这里用
click.echo()
代替了print()
,因为前者可以无需考虑python的版本。
按照上面这个示例,平常很多需求已可以满足,接下来再介绍一些option的一些参数,以及一些别的装饰器。
-
prompt
这个是用来提示输入参数的@click.command() @click.option('-p', '--port', type=int, prompt=True, help="localhost:port") def run(port): """This is to simulate the local running port""" click.echo("Run on http://127.0.0.1:%d" % port) if __name__ == '__main__': run()
结果如下: (flaskLearn) D:\>python try.py Port: 8080 Run on http://127.0.0.1:8080
这个你也可以自己定义提示语,将prompt后的True改成自己的提示语即可
-
required=True
,这个参数默认是False,即非必须调用,而若是要必须选择,则将其设为True。option中的参数若是没有设置default,在没有使用该选项的时候其值为None。 -
多选项
multiple=True
默认False。看如下例子:@click.command() @click.option('-p', '--port', multiple=True) def run(port): print("Run on", port)
(flaskLearn) D:\>python try.py -p 8080 -p 8000 -p 8081 Run on ('8080', '8000', '8081')
这个与之前的type指定多选项有些类似,但是这个并不指定传入参数值的数量,并且使用的也是同一个参数,二者结合使用需要选择使用。
-
@click.password_option()
这个装饰器用来输入密码,以及确认密码的,示例如下:@click.command() @click.password_option() def encrypt(password): click.echo('Encrypting password to %s' % password.encode('rot13'))
它的效果与如下的一样:
@click.command() @click.option('--password', prompt=True, hide_input=True, confirmation_prompt=True) def encrypt(password): click.echo('Encrypting password to %s' % password.encode('rot13'))
结果如下:
$ encrypt Password: Repeat for confirmation: Encrypting password to frperg
然后第二段代码可以自行选择是否确认和是否隐藏。
-
还有一个就是
@click.confirmation_option()
,这个等于也是封装了Yes参数,示例如下:@click.command() @click.confirmation_option(prompt='Are you sure you want to drop the db?') def dropdb(): click.echo('Dropped all tables!')
与一下代码效果相同:
def abort_if_false(ctx, param, value): if not value: ctx.abort() @click.command() @click.option('--yes', is_flag=True, callback=abort_if_false, expose_value=False, prompt='Are you sure you want to drop the db?') def dropdb(): click.echo('Dropped all tables!')
结果如下:
$ dropdb Are you sure you want to drop the db? [y/N]: n Aborted! $ dropdb --yes Dropped all tables!
That's All
想看更多用法和更详细的讲解可以参考一下链接:https://click-docs-zh-cn.readthedocs.io/zh/latest/