简介:
Click是一个Python软件包,用于以可组合的方式创建漂亮的命令行界面,所需的代码更少。它是“命令行界面创建工具包”。它是高度可配置的,但具有开箱即用的明智默认设置。
它旨在使编写命令行工具的过程既快速又有趣,同时还防止由于无法实现预期的CLI API而引起的挫败感。
Click 三个特点:
命令的任意嵌套
自动帮助页面生成
支持在运行时延迟加载子命令
安装:
pip install click
建议配合virtualenv在虚拟环境中使用:
virtualenv解决什么问题?除了单击脚本之外,您可能还希望将其用于其他项目。但是您拥有的项目越多,就越有可能使用不同版本的Python本身,或者至少使用不同版本的Python库。让我们面对现实:库经常破坏向后兼容性,并且任何严肃的应用程序不太可能具有零依赖关系。那么,如果您的两个或多个项目具有相互依赖的关系,您该怎么办?
Virtualenv进行救援!Virtualenv启用了多个并行安装的Python,每个项目一个。它实际上并没有安装Python的单独副本,但确实提供了一种使不同项目环境保持隔离的聪明方法。让我们看看virtualenv是如何工作的。
pip install virtualenv --user
安装virtualenv后,只需启动shell并创建自己的环境即可。我通常在以下位置创建一个项目文件夹和一个venv 文件夹:
# 创建环境
$ mkdir myproject
$ cd myproject
$ virtualenv venv
New python executable in venv/bin/python
Installing setuptools, pip............done.
mac and linux 系统:
$ . venv/bin/activate # 激活环境
$ deactivate # 退出环境
windows系统:
$ venv\scripts\activate # 激活环境
$ deactivate # 退出环境
应用
- click.command() 装饰器装饰一个函数即可将其转换为可调用脚本
import click
@click.command()
def hello():
click.echo('Hello World!')
if __name__ == '__main__':
hello()
结果:
$ python hello.py
Hello World!
click.echo(message = None,file = None,nl = True,err = False,color = None) 将消息和换行符打印到给定的文件或标准输出中
参数:message --要打印的消息
file --要写入的文件(默认为stdout)
err --如果设置为true,则文件默认为stderr而不是 stdout。这比打电话给get_text_stderr()自己更快更容易 。
nl --如果设置为True(默认值),则会在后面打印换行符。
color --控制终端是否支持ANSI颜色。默认为自动检测。
# 初始化数据库
@click.command()
def initdb():
click.echo('Initialized the database')
- click.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)
# 用法二
@click.group()
def cli():
pass
@cli.command()
def initdb():
click.echo('Initialized the database')
@cli.command()
def dropdb():
click.echo('Dropped the database')
if __name__ == '__main__':
cli()
- click.option()/click.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('Hello %s!' % name)
调用结果:
$ python hello.py --help
Usage: hello.py [OPTIONS] NAME
Options:
--count INTEGER number of greetings
--help Show this message and exit.
-
扩展应用
flask web 项目
import os
import sys
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import click
WIN = sys.platform.startswith('win')
if WIN:
prefix = 'sqlite:///'
else:
prefix = 'sqlite:////'
app = Flask(__name__)
app.config['SECRET_KEY'] = os.getenv('SECRET_KEY', 'dev')
app.config['SQLALCHEMY_DATABASE_URI'] = prefix + os.path.join(os.path.dirname(app.root_path), os.getenv('DATABASE_FILE', 'data.db'))
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
@app.cli.command()
@click.option('--drop', is_flag=True, help='Create after drop.')
def initdb(drop):
"""Initialize the database."""
if drop:
db.drop_all()
db.create_all()
click.echo('Initialized database.')
更多知识请查看click官方文档