python 第三方库 click

简介:

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官方文档

你可能感兴趣的:(python 第三方库 click)