用 Python 写命令行工具:Click 库快速构建 CLI
·
使用 Click 库构建 Python 命令行工具
Click 是一个强大的 Python 库,用于快速创建命令行接口(CLI)。它通过装饰器简化了参数解析、命令分组和帮助文档生成,适合构建复杂的命令行工具。
1. 安装 Click
pip install click
2. 基础命令结构
import click
@click.command()
@click.option('--name', default='World', help='输入名称')
def hello(name):
"""简单的问候命令"""
click.echo(f"Hello, {name}!")
if __name__ == '__main__':
hello()
运行效果:
$ python app.py
Hello, World!
$ python app.py --name=Alice
Hello, Alice!
3. 参数类型与验证
支持类型约束和自定义验证:
@click.command()
@click.option('--age', type=click.IntRange(1, 120), help='年龄(1-120)')
def check_age(age):
click.echo(f"年龄验证通过: {age}岁")
4. 命令分组(子命令)
@click.group()
def cli():
pass
@cli.command()
@click.option('--file', required=True, help='文件名')
def read(file):
click.echo(f"读取文件: {file}")
@cli.command()
@click.option('--text', prompt='输入内容', help='写入内容')
def write(text):
click.echo(f"已写入: {text}")
if __name__ == '__main__':
cli()
使用方式:
$ python app.py read --file=data.txt
$ python app.py write
5. 高级功能
- 自动帮助文档:通过
--help自动生成 - 颜色输出:
click.secho("警告", fg='red') - 文件处理:
@click.argument('input', type=click.File('r')) @click.argument('output', type=click.File('w'))
6. 完整示例:文件处理器
import click
@click.group()
def filetools():
"""文件操作工具集"""
@filetools.command()
@click.argument('path', type=click.Path(exists=True))
def info(path):
"""显示文件信息"""
click.echo(f"文件路径: {click.format_filename(path)}")
click.echo(f"文件大小: {os.path.getsize(path)}字节")
@filetools.command()
@click.option('--suffix', default='.bak', help='备份后缀名')
@click.argument('file', type=click.Path(exists=True))
def backup(file, suffix):
"""创建文件备份"""
backup_file = file + suffix
shutil.copy(file, backup_file)
click.echo(f"已创建备份: {backup_file}")
if __name__ == '__main__':
filetools()
7. 最佳实践
- 使用
click.echo()替代print()确保兼容性 - 通过
@click.pass_context共享上下文 - 为复杂工具添加单元测试:
from click.testing import CliRunner runner = CliRunner() result = runner.invoke(cli, ['--help'])
Click 的装饰器语法大幅降低了 CLI 开发复杂度,同时保持了代码可读性。官方文档提供了更多高级特性: Click Documentation
更多推荐



所有评论(0)