python click命令行界面创建工具
-
定义:
- 它旨在使编写命令行工具的过程既快速又有趣,同时还防止由于无法实现预期的CLI API而引起的挫败感。
-
优点:
- 命令的任意嵌套
- 自动帮助页面生成
- 支持在运行时延迟加载子命令
-
安装
pip install click
-
click.option
-
option 最基本的用法就是通过指定命令行选项的名称,从命令行读取参数值,再将其传递给函数。我们除了设置命令行选项的名称,我们还会指定默认值,help 说明等,option 常用的设置参数如下:
- default: 设置命令行参数的默认值
- help: 参数说明
- type: 参数类型,可以是 str, int, float,click.Choice类的对象
- prompt: 当在命令行中没有输入相应的参数时,会根据 prompt 提示用户输入可以指定 True, 或者特定字符串来提示用户输入
- nargs: 指定命令行参数接收的值的个数, -1 表示可以接收多个参数
import click @click.command() @click.option('--db', default='mysql', type=click.Choice(['mysql', 'redis', 'mongo'])) def select_db(db): click.echo('use %s!' % db)
-
有的时候需要输入密码
- hide_input: 隐藏输入的内容
- confirmation_prompt: 重复输入
import click @click.command() @click.option('--pwd', prompt=True, hide_input=True, confirmation_prompt=True) def input_password(pwd): click.echo('password: %s!' % pwd) if __name__ == '__main__': input_password()
-
或者使用专用的装饰器:click.password_option
import click @click.command() @click.password_option() def input_password(password): click.echo('password: %s!' % password) if __name__ == '__main__': input_password()
-
可以使用–或者-来传递参数
import click @click.command() @click.option('--action', '-a', type=click.Choice(['start', 'restart', 'stop']), default='start') def run(action): click.echo("action:{}".format(action)) if __name__ == '__main__': run()
-
-
click.argument
-
使用@click.argument来添加固定参数
import click @click.command() @click.option('--count', default=1, help='number of greetings') @click.argument('name') def hello(count, name): for x in range(count): click.echo('Hello %s!' % name) if __name__ == '__main__': hello()
-
多个参数,直接在脚本后面添加,以空格分隔
import click @click.command() @click.argument('x') @click.argument('y') @click.argument('z') def show(x, y, z): click.echo('x: %s, y: %s, z:%s' % (x, y, z)) if __name__ == '__main__': show()
-
nargs吸收多余的参数
-
nargs=-1,表示参数src接收不定量参数值,参数值会以tuple的形式传入函数
-
nargs大于等于1,表示接收nargs个参数
import click @click.command() @click.argument('src', nargs=-1) @click.argument('dst', nargs=1) def move(src, dst): click.echo('move %s to %s' % (src, dst)) if __name__ == '__main__': move()
-
-
-
click.group
-
通过group来实现命令行的嵌套,也就是让一个命令行工具具有多个命令
import click @click.group() def cli(): click.echo('Hello world') @cli.command() def initdb(): click.echo('Initialized the database') @cli.command() def dropdb(): click.echo('Dropped the database') if __name__ == '__main__': cli()
-