使用 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. 最佳实践
  1. 使用 click.echo() 替代 print() 确保兼容性
  2. 通过 @click.pass_context 共享上下文
  3. 为复杂工具添加单元测试:
    from click.testing import CliRunner
    runner = CliRunner()
    result = runner.invoke(cli, ['--help'])
    

Click 的装饰器语法大幅降低了 CLI 开发复杂度,同时保持了代码可读性。官方文档提供了更多高级特性: Click Documentation

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐