You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何判断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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 17:05:21