Python 命令行工具 Click 快速掌握
本文介绍 Python 中强大的命令行库 Click。通过安装、基础命令创建、参数选项配置以及 Group 分组功能,展示如何用少量代码构建优雅的命令行工具。涵盖装饰器使用、参数类型定义、交互式提示及子命令管理,适合需要开发 CLI 应用的开发者参考。
前言
前言
在 Python 开发中,编写命令行接口是常见需求。尽管标准库提供了 Argparse,但其使用复杂度较高,因此较少被采用。相比之下,Click 作为 Flask 团队 Pallets 开源的项目,凭借极简的代码即可构建优雅的命令行工具,旨在让创建过程既高效又有趣。
百闻不如一试
安装与基础使用
安装
pip install Click
使用
创建 click_demo.py ,写一个最简单的函数
import click
@click.command()
def hello():
click.echo('Hello World!')
if __name__ == '__main__':
hello()
运行:
python click_demo.py
Hello World!
通过装饰器 click.command() 可将普通函数直接转换为命令行工具,其中 echo 函数的功能等同于 print。
参数配置与交互
参数
利用装饰器 click.option() 可以为命令行函数定义具体参数。
import click
@click.command()
@click.option("--count", default=1, help="打印次数", type=int)
def hello(count):
"""
这是一个简单示例
"""
for i in range(count):
click.echo('Hello World!')
if __name__ == '__main__':
hello()
- --count:count是参数的名字
- default : 参数的默认值
- type:给参数指定类型
- help: 说明文档
执行脚本时追加参数 --help 即可查看帮助文档。
$ python click_demo.py --help
Usage: click_demo.py [OPTIONS]
这是一个简单示例
Options:
--count INTEGER 打印次数
--help Show this message and exit.
指定参数:
>python click_demo.py --count 3
Hello World!
Hello World!
Hello World!
prompt
部分命令行工具需在运行时获取用户输入,此时可为 option 装饰器设置 prompt 参数以实现交互。
import click
@click.command()
@click.option("--count", default=1, help="打印次数", type=int)
@click.option("--name", prompt="请输入名字", help="姓名")
def hello(count, name):
"""
这是一个简单示例
"""
for i in range(count):
click.echo(f'Hello {name}!')
if __name__ == '__main__':
hello()
$ python click_demo.py
请输入名字: lzjun
Hello lzjun!
Group 分组功能
Group
Click 的核心特性之一是分组功能。当命令行逻辑复杂时,为了解耦,应将不同逻辑分散至不同命令中,从而避免单一函数过于臃肿。参考示例:
# db.py
import click
@click.group()
def db():
pass
@click.command()
@click.option("--name", help="用户名")
def add(name):
"""
添加用户
:param name:
:return:
"""
click.echo(f'add user {name}')
@click.command()
@click.option("--id", help="用户名")
def delete(id):
"""
删除用户
:param id:
:return:
"""
click.echo(f'delete user {id}')
db.add_command(delete)
db.add_command(add)
if __name__ == '__main__':
db()
这是一个操作数据库DB的命令行工具,提供了添加用户和删除用户的命令行等其它操作,如果所有的业务逻辑全部写在一个函数,维护变得异常困难。
@click.group 装饰器将函数封装为 Group 对象,通过该对象可注册多个子命令。
python db.py --help
Usage: db.py [OPTIONS] COMMAND [ARGS]...
Options:
--help Show this message and exit.
Commands:
add 添加用户 :param name: :return:
delete 删除用户 :param id: :return:
从帮助文档中我们看到 add 和 delete 就是两个子命令。 Flask 框架的 flask 命令也是一个 Group 命令。
$ flask
Usage: flask [OPTIONS] COMMAND [ARGS]...
A general utility script for Flask applications.
Provides commands from Flask, extensions, and the application. Loads the
application defined in the FLASK_APP environment variable, or from a
wsgi.py file. Setting the FLASK_ENV environment variable to 'development'
will enable debug mode.
$ export FLASK_APP=hello.py
$ export FLASK_ENV=development
$ flask run
Options:
--version Show the flask version
--help Show this message and exit.
Commands:
add_user 添加账号 :param name: :param username: :param password:...
init_invite_code 添加邀请码
recommend_account 更新推荐账号
routes Show the routes for the app.
run Runs a development server.
shell Runs a shell in the app context.
提供了几个预定义的子命令和自定义的命令。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













