快速启动¶
安装¶
从PyPI安装::
pip install click
强烈建议安装到虚拟环境中。我们建议 Virtualenv .
示例¶
Click应用程序的一些独立示例与Click一起打包。它们可在 examples folder 回购的。
基本概念-创建命令¶
单击基于通过修饰符声明命令。在内部,高级用例有一个非修饰接口,但不鼓励高级使用。
通过将函数修饰为单击命令行工具 click.command()
. 最简单的是,用这个修饰器修饰一个函数就可以使它成为一个可调用的脚本:
import click
@click.command()
def hello():
click.echo('Hello World!')
发生的是,修饰符将函数转换为 Command
然后可以调用它:
if __name__ == '__main__':
hello()
看起来像是:
$ python hello.py
Hello World!
以及相应的帮助页面:
$ python hello.py --help
Usage: hello.py [OPTIONS]
Options:
--help Show this message and exit.
回响¶
为什么这个例子使用 echo()
而不是普通的 print()
功能?这个问题的答案是Click试图始终如一地支持不同的环境,并且即使在环境配置错误的情况下也非常健壮。Click希望至少在一个基本的层次上具有功能性,即使一切都被完全破坏了。
这意味着 echo()
函数在终端配置错误的情况下应用一些纠错,而不是死于 UnicodeError
。
ECHO功能还支持输出中的颜色和其他样式。如果输出流是文件,它将自动删除样式。在Windows上,Colorama会自动安装和使用。看见 ANSI颜色 。
如果不需要,也可以使用 print()
结构/功能。
嵌套命令¶
命令可以附加到其他类型的命令 Group
. 这允许任意嵌套脚本。例如,下面的脚本实现了两个用于管理数据库的命令:
@click.group()
def cli():
pass
@click.command()
def initdb():
click.echo('Initialized the database')
@click.command()
def dropdb():
click.echo('Dropped the database')
cli.add_command(initdb)
cli.add_command(dropdb)
如你所见, group()
装饰工的工作方式 command()
但创建了一个 Group
对象,它可以被赋予可以附加的多个子命令 Group.add_command()
.
对于简单的脚本,还可以使用 Group.command()
改为装饰。上面的脚本可以这样编写:
@click.group()
def cli():
pass
@cli.command()
def initdb():
click.echo('Initialized the database')
@cli.command()
def dropdb():
click.echo('Dropped the database')
然后您将调用 Group
在您的入口点或其他调用中:
if __name__ == '__main__':
cli()
稍后注册命令¶
而不是使用 @group.command()
装饰器,命令可以用素色装饰 @click.command()
装潢师,后来在一个小组注册 group.add_command()
. 这可以用于将命令拆分为多个Python模块。
@click.command()
def greet():
click.echo("Hello, World!")
@click.group()
def group():
pass
group.add_command(greet)
添加参数¶
要添加参数,请使用 option()
和 argument()
装饰者:
@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(f"Hello {name}!")
它是什么样子的:
$ python hello.py --help
Usage: hello.py [OPTIONS] NAME
Options:
--count INTEGER number of greetings
--help Show this message and exit.
切换到入口点¶
在您到目前为止编写的代码中,文件末尾有一个块,如下所示: if __name__ == '__main__':
。这是传统上独立的Python文件的外观。有了Click,你可以继续这样做,但更好的方法是将你的应用程序打包成一个入口点。
有两个主要(以及更多)原因:
第一个是安装程序会自动为Windows生成可执行包装,因此您的命令行实用程序也可以在Windows上运行。
第二个原因是,入口点脚本可以在Unix上与Virtualenv一起工作,而不必激活Virtualenv。这是一个非常有用的概念,它允许您将脚本与所有需求捆绑到一个虚拟环境中。
Click可以很好地处理这一点,事实上,文档的其余部分将假定您正在将应用程序编写为分布式包。
看看这个 包装入口点 在阅读其余章节之前,示例假定您将使用入口点。