核心内容摘要
告别“禁区”:十大App助你解锁被禁止的应用游戏世界
什么是 Click 框架Click 是 Python 生态中最流行的第三方 CLI 开发框架由 Flask 作者 Armin Ronacher 开发核心优势是语法简洁基于装饰器比 Python 标准库argparse更易上手支持丰富的功能子命令、参数验证、颜色输出、提示输入等自动生成帮助文档无需手动编写跨平台兼容Windows/Linux/macOS
安装 Click通过 pip 安装pip install click
核心
使用方法
最简示例基础命令先写一个最简单的 CLI 程序实现 “打招呼” 功能import click # click.command() 把普通函数转为CLI命令 click.command() def hello(): 这是一个简单的问候命令帮助信息会自动生成 click.echo(Hello, Click!) # click.echo 替代print兼容多平台 if __name__ __main__: hello()运行效果
核心功能 1选项Optionclick.option()用于定义可选参数带--或-前缀支持默认值、类型限制、帮助信息等import click click.command() # 定义选项--name / -n 是参数名default是默认值help是帮助信息 click.option(--name, -n, defaultGuest, help你的名字) # 定义布尔型选项--uppercase / -uis_flagTrue 表示是开关无需传值 click.option(--uppercase, -u, is_flagTrue, help是否转为大写) def greet(name, uppercase): 根据输入的名字打招呼 message fHello, {name}! if uppercase: message message.upper() click.echo(message) if __name__ __main__: greet()运行效果
核心功能 2参数Argumentclick.argument()用于定义必选参数无前缀直接传值适合必填的核心参数import click click.command() # 必选参数filename无默认值必须传 click.argument(filename) # 可选选项--mode / -m限制可选值typeclick.Choice click.option(--mode, -m, typeclick.Choice([read, write]), defaultread, help操作模式) def file_op(filename, mode): 对指定文件执行操作 click.echo(f操作文件{filename}模式{mode}) if __name__ __main__: file_op()运行效果
核心功能 3子命令Groupclick.group()用于创建命令组实现类似git add、git commit这样的子命令结构import click # 创建命令组 click.group() def cli(): 一个包含多个子命令的CLI工具 pass # 组本身无逻辑仅用于承载子命令 # 子命令1hello cli.command() def hello(): 打招呼 click.echo(Hello!) # 子命令2bye cli.command() click.option(--name, defaultGuest, help你的名字) def bye(name): 说再见 click.echo(fGoodbye, {name}!) if __name__ __main__: cli()运行效果Click 的group命令组设计遵循 CLI 工具的通用范式比如git、docker一次只能执行一个子命令。
如果需要一次性执行多个子命令的逻辑核心思路是把每个子命令的业务逻辑抽离成普通函数再新增一个 “批量执行” 的子命令在里面调用这些普通函数。
import click # ---------------------- # 第一步抽离子命令的核心逻辑为普通函数 # ---------------------- def hello_logic(): hello子命令的核心逻辑 click.echo(执行hello逻辑Hello!) def bye_logic(nameGuest): bye子命令的核心逻辑 click.echo(f执行bye逻辑Goodbye, {name}!) # ---------------------- # 第二步定义命令组和原有子命令调用抽离的逻辑 # ---------------------- click.group() def cli(): 支持批量执行多个子命令的CLI工具 pass # 原有hello子命令仅调用核心逻辑 cli.command() def hello(): 单独执行hello hello_logic() # 原有bye子命令仅调用核心逻辑 cli.command() click.option(--name, defaultGuest, help你的名字) def bye(name): 单独执行bye bye_logic(name) # ---------------------- # 第三步新增批量执行的子命令 # ---------------------- cli.command() click.option(--cmds, -c, multipleTrue, typeclick.Choice([hello, bye]), requiredTrue, help要执行的子命令列表可多选比如 -c hello -c bye) click.option(--name, defaultGuest, help传给bye的名字参数) def batch(cmds, name): 动态选择批量执行的子命令 click.echo(f 开始批量执行{cmds} ) for cmd in cmds: if cmd hello: hello_logic() elif cmd bye: bye_logic(name) click.echo( 批量执行完成 ) if __name__ __main__: cli()运行效果
4.
子命令链式执行chainTrue是click.Group的关键参数作用是允许在一次命令行调用中按顺序执行多个子命令即 “链式执行”。
默认情况下chainFalse默认值命令组一次只能执行一个子命令比如cli hello或cli bye开启chainTrue后可连续执行多个子命令比如cli hello bye框架会按输入顺序依次调用每个子命令。
下面是一个极简示例直观展示chainTrue的效果import click # 开启链式执行的命令组 click.group(chainTrue) def cli(): 支持链式执行多个子命令的CLI工具 pass # 子命令1打招呼 cli.command() click.option(--name, defaultGuest, help你的名字) def hello(name): 执行打招呼逻辑 click.echo(f[第一步] Hello, {name}!) # 子命令2说再见 cli.command() def bye(): 执行说再见逻辑 click.echo(f[第二步] Goodbye!) # 子命令3输出时间 cli.command() def show_time(): 输出当前时间 from datetime import datetime now datetime.now().strftime(%Y-%m-%d %H:%M:%S) click.echo(f[第三步] 当前时间{now}) if __name__ __main__: cli()运行效果:# 链式执行3个子命令python chain_demo.py hello --name 小明 bye show_time输出结果严格按输入顺序执行[第一步] Hello, 小明! [第二步] Goodbye! [第三步] 当前时间