click包一般用于带参数的python脚本运行,是通过装饰器来把一个函数方法装饰成命令行接口的,
常见的装饰器有:
1. @click.command():将其下面的函数方法装饰为命令行接口选项,(我们称为一个command实例或子命令),实现在命令行运行时可选
2. @click.option(’--xxx’, '-x', default=1,prompt=‘Your name’,type=int,nargs=1,help=‘Number of greetings)
参数释义:--xxx:即下列函数的形参
-x:形参在命令行里的缩写
default:默认值
prompt:若未输入,就提示该内容
type:参数类型
nargs:指定命令行参数接收的值的个数, -1 表示可以接收多个参数
help:编辑该参数的帮助
例:
import click
@click.command() # 将函数装饰为命令
@click.option('--n', '-nn', default=1) # 设置函数执行时的参数
def dots_n(n):
click.echo('.' * n)
if __name__ == '__main__':
dots_n()
3. @click.group():装饰器把主函数装饰为可以拥有多个子命令的 Group
对象,即脚本文件里有多个函数方法(可装饰为command实例),不同的 command 实例可以关联到group中。group下绑定的命令就成为了它的子命令。
例:
import click
@click.group() # 将主函数封装到一个group对象
def main():
pass
@main.command() # 将函数装饰为命令,并将该命令自动关联到main这一group对象下,成为子命令
@click.option('--n', '-nn', default=1) # 设置函数执行时的参数
def dots_n(n):
click.echo('.' * n)
@main.command()
@click.option('--name', '-a', default='ZJW', type=str, prompt='Your Name')
def your_name(name):
click.echo(name)
if __name__ == '__main__':
main()
这里,不使用'main.command()'自动关联,可以使用main.add_command()手动关联,例:
import click
@click.group() # 将main函数装饰为一个group对象
def main():
pass
@click.command() # 将下列函数装饰为命令
@click.option('--n', '-nn', default=1) # 设置函数参数
def dots_n(n):
click.echo('.' * n)
@click.command()
@click.option('--a', '-aa', default='ZJW', type=str, prompt='Your Name')
def your_name(a):
click.echo(a)
main.add_command(dots_n) # 将命令关联到main这一group对象下
main.add_command(your_name)
if __name__ == '__main__':
main()
运行:
python test.py dots-n --n 5 或
python test.py dots-n -n 5
python test.py your-name --name zjw 或
python test.py your-name -a zjw
这里值得注意的时,函数名里的下划线‘_’要在输入时变为‘-’,否则函数会报参数不对的错误。
并且我们如果不输入command的话,会报下列错误:
Usage: test.py [OPTIONS] COMMAND [ARGS]...
Options:
--help Show this message and exit.
Commands:
dots-n
your-name