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

如何在被ProcA通过source加载的TCL脚本ScrpB内识别加载源?

判断ScrpB是否由ProcA加载的TCL实现方案

要在ScrpB内部判断是否被ProcA通过source命令加载,你可以通过解析调用栈帧信息实现——之前使用info frame未获取有效信息,大概率是没有正确提取栈帧中的过程字段。以下是具体实现方法:

方法一:检查直接调用者栈帧

在ScrpB的代码中,通过info frame -1获取直接调用当前代码的栈帧上下文,提取其中的过程名进行判断:

# ScrpB.tcl 中的代码
set caller_frame [info frame -1]
# 检查栈帧中是否包含proc字段,且对应过程名为ProcA
if {[dict exists $caller_frame proc] && [dict get $caller_frame proc] eq "ProcA"} {
    puts "当前脚本由ProcA加载"
} else {
    puts "当前脚本未被ProcA加载"
}

方法二:遍历所有栈帧(处理多层调用场景)

如果ProcA是通过多层嵌套调用执行source加载ScrpB的,你可以遍历所有栈帧,检查是否存在ProcA的调用记录:

# ScrpB.tcl 中的代码
set loaded_by_ProcA 0
foreach frame [info frame] {
    if {[dict exists $frame proc] && [dict get $frame proc] eq "ProcA"} {
        set loaded_by_ProcA 1
        break
    }
}

if {$loaded_by_ProcA} {
    puts "检测到当前脚本由ProcA加载"
} else {
    puts "未检测到ProcA加载当前脚本"
}

注意事项

  • 如果ProcA位于特定命名空间下,需要在判断时加上完整的命名空间前缀,例如::my_ns::ProcA;
  • info frame返回的栈帧信息是字典结构,需确保TCL版本支持字典操作(TCL 8.5及以上默认支持)。

内容的提问来源于stack exchange,提问作者Aharon Grupman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 20:50:29