如何判断Python函数是否通过Typer命令行程序调用?
解决Typer命令行调用与普通函数调用的判断问题
你可以通过Typer内置的Context上下文对象来判断函数是通过命令行调用还是普通函数调用,这是最符合Typer设计的原生方案,无需全局变量或环境变量。
实现逻辑
当函数被Typer命令行程序调用时,Typer会自动向函数注入一个隐藏的ctx参数(类型为typer.Context);而直接通过普通函数调用时,这个参数不会被传入。我们可以给函数添加一个可选的ctx参数并设置默认值为None,通过检查该参数是否存在且为有效Context实例来区分调用方式。
修改后的代码示例
from typer import Typer, Context app = Typer() @app.command() def do(a: int, b: int, c: int, ctx: Context = None): output = a + b + c # 判断是否通过Typer命令行调用 if ctx is not None: print(output) return output if __name__ == '__main__': app()
验证方式
- 命令行调用:执行
python your_script.py 1 2 3,会打印结果6并返回值。 - 普通函数调用:在其他代码中
do(1,2,3),只会返回6,不会打印输出。
对比其他方案的优势
- 相比全局变量/环境变量:完全基于Typer的原生机制,没有额外的状态污染,代码更简洁可靠。
- 相比
app.callback():无需额外编写回调函数,直接在业务函数内完成判断,逻辑更紧凑。
内容的提问来源于stack exchange,提问作者Yesh
相关产品推荐
相关产品推荐

