Java基于springboot+vue的校园跑腿接单系统

核心内容摘要

Rhino.Inside.Revit实战指南:零基础掌握BIM参数化设计全流程
强烈安利!8个降AIGC软件测评:专科生降AI率必备指南

FPGA加密算法功耗稳定性验证框架

什么是 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! [第三步] 当前时间

15:30:00若需要让后续子命令接收前一个子命令的结果可通过click.pass_context结合上下文的obj属性实现import click click.group(chainTrue) click.pass_context # 传递上下文对象 def cli(ctx): # 初始化上下文存储容器用于子命令间传值 ctx.ensure_object(dict) ctx.obj[history] [] # 存储每个子命令的执行结果 cli.command() click.pass_context click.option(--name, defaultGuest) def hello(ctx, name): msg fHello, {name}! click.echo(msg) ctx.obj[history].append(msg) # 存入上下文 return msg cli.command() click.pass_context def bye(ctx): msg Goodbye! click.echo(msg) ctx.obj[history].append(msg) # 读取前一个子命令的结果 if len(ctx.obj[history]) 2: click.echo(f← 前一个命令的结果{ctx.obj[history][-2]}) if __name__ __main__: cli()运行效果python chain_demo.py hello --name 小明 bye输出Hello, 小明! Goodbye! ← 前一个命令的结果Hello, 小明!默认情况下即使某个子命令执行失败后续子命令仍会执行如需中断链式执行可在子命令中主动抛出click.Abort()异常cli.command() def error_demo(): click.echo(这个命令会触发中断) raise click.Abort() # 中断后续所有子命令

实用进阶特性提示输入当用户未传参数时自动提示输入click.command() click.option(--name, prompt请输入你的名字, help你的名字) def ask_name(name): click.echo(f你输入的名字是{name})密码输入隐藏输入的敏感信息click.command() click.option(--password, promptTrue, hide_inputTrue, confirmation_promptTrue) def input_pwd(password): click.echo(密码已输入已隐藏)颜色输出让 CLI 输出更美观需安装 colorama 兼容 Windowspip install coloramaclick.command() def color_text(): click.echo(click.style(成功, fggreen)) # 绿色文字 click.echo(click.style(警告, fgyellow, bgblack)) # 黄字黑底 click.echo(click.style(错误, fgred, boldTrue)) # 红色加粗

S调m的26种调法视频-S调m的26种调法视频应用

百度百家号客服电话人工服务

123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123