click模块是Flask的做者开发的一个第三方模块,用于快速建立命令行。它的做用与Python标准库的argparse相同,可是,使用起来更简单。python
click是一个第三方库,所以使用起来须要先行安装安全
使用pip命令便可完成模块的安装ide
pip install click
Click对argparse的主要改在在于易用性,使用click模块主要分为两个步骤:函数
下列为click官方提供的例子:ui
import click @click.command() @click.option('--count', default=1, help='Number of greetings.') @click.option('--name', prompt='Your name', help='The person to greet.') def hello(count, name): """Simple program that greets NAME for a total of COUNT times.""" # 会看成help信息进行输出 for x in range(count): click.echo('Hello %s!' % name) if __name__ == '__main__': hello()
在上面的例子中,函数hello接受两个参数,分别是count和name,他们的取值从命令行中获取,这里咱们使用了click模块中的command、option、echo,他们的做用以下:this
运行上面的脚本,能够经过命令指定--name,--count的值,因为咱们在option中指定了prompt选项,那么若是咱们执行脚本没有传递name这个参数时,Click会提示咱们在交互模式下输入spa
PS:与argparse模块同样,click也会为咱们自动生成提示信息命令行
lidaxindeMacBook-Pro:hello DahlHin$ python3 click模块.py --help Usage: click模块.py [OPTIONS] Simple program that greets NAME for a total of COUNT times. Options: --count INTEGER Number of greetings. --name TEXT The person to greet. --help Show this message and exit.
option最基本的用法就是经过指定命令行选项的名称,从命令行读取参数值,再将其传递给函数。option经常使用的参数含义:blog
import click @click.command() @click.option('--pos',nargs=2,type=float) def getfloat(pos): click.echo('%s / %s' % pos ) if __name__ == '__main__': getfloat()
注意:option中定义的参数名称,那么就须要用同名的变量进行接受。接口
更多参数请参考: http://click.pocoo.org/5/options/#choice-opts
场景一:咱们限定用户输入的值,那么就须要使用Click模块中的Choice函数,Choice的参数是一个列表,该列表中列出全部可能的值。
import click @click.command() @click.option('-c',required=True,type=click.Choice(['start','stop'])) # 限定-c的值为start,或者stop,required表示是否为必填参数 def getcommand(c): click.echo('command is %s' % c ) if __name__ == '__main__': getcommand()
场景二:应用程序从命令行读取密码。
使用标准库中的argparse模块只能像输入普通参数同样输入密码。这种方式存在必定安全隐患,例如输入的密码会保存在history中,查看命令历史列表就能获取密码
在Click中,这个问题就能完美的解决,只须要是这prompt为True,那么咱们就能交互式输入密码,设置hide_input为True,就能隐藏密码,设置confirmation_prompt为True,就能够进行密码的两次验证,使用起来很是便捷。
import click @click.command() @click.option('-p',prompt='Your Password',hide_input=True,confirmation_prompt=True) def getpassword(p): click.echo('Your Password is : %s' % p) if __name__ == '__main__': getpassword()