获取TCL中执行代码的行号

2023-12-03

如何打印执行TCL脚本的行号?

#! /usr/bin/tclsh

set a "100"
set b "200"
set c [expr $a + $b]
puts [info script] ;# it will display the script name which it is executing. 
                    # similarly I need to print the script line number.
puts $c

你必须使用info frame简单地完成这件事。

info frame ?number?

此命令提供对堆栈上所有帧的访问,甚至是那些隐藏在信息级别的帧。如果未指定数字,则此命令返回一个给出命令帧级别的数字。如果在顶层调用该命令,则值为 1。如果指定了 number,则结果是一个字典,其中包含堆栈上编号级别的命令的位置信息。

如果 number 为正 (> 0),则它选择特定的堆栈级别(1 指最顶层的活动命令,即info frame本身,2 到调用它的命令,依此类推);否则它给出相对于当前命令的级别(0 指当前命令,即信息帧本身,-1 指其调用者,依此类推)。

我们将利用返回的字典info frame命令。键之一是“line”,它包含脚本的行号。

有一个简单的proc as,

proc printLine {frame_info} {
    # Getting value of the key 'line' from the dictionary 
    # returned by 'info frame'
    set result [dict get [info frame $frame_info]  line] 
}

一般来说,生成的字典来自[info frame $frame_info]会是这样的,

type source line 17 file /home/dinesh/stackoverflow/test cmd {printLine [info frame] } proc ::B level 1

由此,我们只是得到键值“line”dict get

只需使用该上下文的当前帧号调用此过程即可,这可以通过以下方式实现info frame itself.

i.e.

set lineNumber [printLine [info frame]]; #Place this line in your code.

该逻辑的演示如下。

打印行号.tcl

#!/usr/bin/tclsh
proc printLine {frame_info} {
        # Getting value of the key 'line' from the dictionary 
        # returned by 'info frame'
        set result [dict get [info frame $frame_info]  line]
}
proc D {} {
        puts "proc D"
        puts [ printLine [info frame] ]
}
proc C {} {
        puts "proc C"
        puts [ printLine [info frame] ]
        D
}
proc B {} {
        puts "proc B"
        puts [ printLine [info frame] ]
        C
}
proc A {} {
        puts "proc A"
        puts [ printLine [info frame] ]
        B
}

puts "Global"
puts [ printLine [info frame] ]
A

文档:info, dict

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

获取TCL中执行代码的行号 的相关文章

  • 在 TCL 中使用多个参数启动程序 (vcom) 时出现问题

    我正在尝试使用额外选项从 TCL 脚本启动程序 vcom set compilationArgs quiet 93 vcom compilationArgs work work polar2rect sc corproc vhd 但是当我运
  • 如何在Tcl中安装软件包?

    我正在尝试安装critlib在我的机器上 http equi4 com critlib http equi4 com critlib 这样我就可以在 Tcl 中动态创建 zip 文件 问题是我不知道如何安装 Tcl 软件包 您是否有放置文件
  • TCL 面临的问题:在引号中列出元素,后跟“;”而不是空间

    我是 TCL 的新手 我正在尝试自学脚本 我正在尝试解析一个文件并尝试首先分隔每一行 然后将每一行分解为每个单词 然而 我的执行结束时给出了以下消息 DISPLAY output TDO list element in quotes fol
  • Tcl 扩展:扩展的 ClientData 的生命周期

    重要的本机扩展将需要每个解释器的数据 动态分配的结构 我目前正在使用Tcl SetAssocData 有一个对应的密钥 扩展名和适当的删除例程 以防止此内存泄漏 然而 Tcl PkgProvideEx 也允许记录这样的 信息 该信息可以通过
  • TCL 电子邮件脚本无法在 Activestate TCL 中发送

    我在 MAC OSX 版本的 TCL 上运行了以下脚本 它工作正常 但它挂在 Windows 7 计算机上的 ActiveState TCL 上 proc send simple message recipient email server
  • TCL - 按任意数量的空格将字符串拆分为列表

    假设我有一个像这样的字符串 set str AAA B C DFG 142 56 现在我想得到一个列表 如下所示 AAA B C DFG 142 56 为此 我想使用 split 函数 但在这种情况下我会得到一些额外的空列表 我怎样才能得到
  • TCL/Expect - exec - 如何使用参数执行程序

    我正在尝试使用 TCL 命令exec in tclsh这是我的结果 set show me dir ls ls exec show me dir VboxSharedFolder set show me dir ls la ls la ex
  • 解析 tcl 中的文本文件并创建键值对字典,其中值采用列表格式

    如何分离以下文本文件并仅保留相应的所需数据 例如文本文件的格式 Name Roll number Subject Experiment name Marks Result Joy 23 Science Exp related to magn
  • 如何用C++扩展TCL?

    我可以编写可编译并用于扩展 TCL 的 C 代码 我不是指调用可执行文件 吗 我可以描述一些类 函数并通过调用已编译的 so 或 a 文件 C 代码在我的 TCl 代码中使用它们吗 如果是 请示意性地向我解释一下它是如何完成的 http c
  • 标准输出重定向

    我正在使用 tcl 中的一个程序 我无法控制该程序 它在输出窗口上输出很多详细信息 例如 Response
  • tkinter - wm 协议不处理 WM_HELP 消息

    tkinter 只处理已知协议吗 如果是这样 那对我来说似乎没什么用 如果不是 我不确定为什么这段代码在微软下对我有用 import tkinter as tk def lol print hi root tk Tk menu tk Men
  • 如何捕捉Tk中的最大化信号?

    您可以通过以下方式将命令与窗口的 X 按钮绑定 wm protocol windowPath WM DELETE WINDOW command 如何对窗口的最大化按钮执行相同的操作 X11 中也没有标准协议ICCCM套 http tronc
  • Tcl + 检查文件存在

    我正在尝试检查 Tcl 中是否存在文件 但我似乎无法得到真实的结果 尽管我知道它的存在 while true if file exists file name 1 exp send copy file txt destination r p
  • 按值对 Tcl 字典排序

    我想知道 Tcl 中是否有一种按值对 dict 进行排序的优雅方法 假设我有以下字典 set d1 dict create k1 10 k2 89 k3 1 k4 15 k5 20 Results in dict of form k1 gt
  • 在 Tkinter 中处理触摸屏手势

    我将如何在 Tkinter 中安装触摸屏手势处理程序 我需要一些特别简单的事情 每当检测到 展开 手势时就增加字体大小 如果 Tcl Tk 没有具体实现的话 这是否可以在 Tkinter 中实现 我想要么窗口管理器向客户端窗口发送一些我可以
  • 执行 tail -F 直到匹配模式

    我想做一个tail F在文件上直到匹配模式 我找到了一种使用方法awk 但恕我直言 我的命令并不是很干净 问题是我need由于某些限制 只能用一行来完成 tail n 0 F tmp foo awk W interactive if 1 E
  • TCL - 使用正则表达式获取另一个字符串中由空格分隔的字符串列表

    如何在 TCL 中编写匹配单词和空格的正则表达式 例如我有 aaaa bbbb cccc 我想匹配 aaaaa bbbb cccc 另外请告诉我空白和非空白的正则表达式符号是什么 我到处都找不到它 Thanks 我的想法是只搜索单词字符的分
  • 如何让proc更有效?

    有一个顶点集合 x1 y1 x2 y2 xn yn 我想改变这些坐标的中心 所以我尝试 proc changeCenter vertices X Y set myList list foreach element vertices lapp
  • 如何从 tcl 列表中删除空元素

    你好 我有以下清单 设置 qprList 12345 12345
  • TCL 中的 if 语句

    我对以下代码的 tcl 中的 if 语句有疑问 if number 1 name hello number 0 name yes do something here 上面的代码是有效的 但是如果我这样写 if number 1 name h

随机推荐

  • 在固定 div 内旋转文本

    我正在尝试在页面左侧设置一个固定 div 距离左侧 24px 并从页面顶部延伸到底部 该 div 内将包含导航和标题 我试图将标题旋转 90 度并居中定位到 div 的底部 很难弄清楚这一点 查了很多地方都没有看到类似的例子 我已经用当前的
  • 将 HTML 字符串转换为 DOM 元素?

    有没有办法将 HTML 转换为 div a href a span span div 或者任何其他 HTML 字符串到 DOM 元素中 这样我就可以使用appendChild 我知道我可以执行 innerHTML 和 innerText 但
  • write_csv read_csv 在第 1000 行后使用科学记数法

    使用 write csv 将混合有小整数条目 值小于 1000 和 大 整数条目 值 1000 或以上 的数据框写入 csv 文件 会混合科学和非科学条目 如果前 1000 行是小值 但此后有一个大值 则 read csv 似乎会与这种混合
  • Cassandra-Windows 10

    我已经安装了 apache cassandra 3 11 11 和 DATASTAX DDC 但它们无法在 Windows 10 上运行 它在 cmd 中给出错误 如图所示 我尝试在 powershell 上编写 cassandra bat
  • ASP.NET MVC3如何使用间隔一小时的计时器执行控制器的操作方法

    Hello 我正在使用 asp net mvc3 我有一个特殊的控制器 它有一种特殊的操作方法 我需要使用计时器以一小时为间隔执行此操作方法 任何最好 最有效的想法 thanks 我能够使用 VBScript 和 Windows Sched
  • 如何从 hapi.js 路由处理程序外部进行回复

    我有一个hapi js我想推迟响应的路线 我尝试过存储reply函数并稍后调用它 或者将其包装在 Promise 中 但 hapi 总是立即响应 500 内部服务器错误响应 存储回复以供稍后使用 var pendingReplies ser
  • 使用 == 运算符将 char 与 0x80 进行比较总是结果为 false?

    char byte 0x80 if byte 0x80 cout lt lt This message never gets printed 十六进制值0x80二进制等价于1000 0000 这显然适合一个字节 但是 编译器会警告我有关条件
  • 控制插入符号 R 包中交叉验证的采样

    我有以下问题 在来自 N 个受试者的数据集中 每个受试者有几个样本 我想在数据集上训练模型 但我想确保在每次重采样中 训练集中没有受试者的重复 或者 我会阻止按主题进行交叉验证 那可能吗 如果没有插入符号包 我会做类似的事情 模拟代码 su
  • boost asio Streambuf 调用消耗后不释放内存?

    boost asio streambuf b void handler const boost system error code e std size t size if e std stringstream sstr std strin
  • 如何在不使用服务的情况下在子组件和父组件之间传递反应式表单数据

    当我们单击父级按钮时 我们希望使用来自父级的子级反应式表单数据 目前我们正在使用 viewchild 来获取子组件引用 我们正在获取所有静态数据 但没有获取表单填充的数据 parent component ts ViewChild Deta
  • Git 跟踪、未跟踪、暂存、索引的含义?

    有人可以澄清这些术语的含义吗 跟踪的文件是否是在某个时刻添加到舞台中的任何文件 索引 和 阶段 一样吗 是否跟踪所有暂存文件 但反之则不一定成立 即 曾经暂存并提交的文件 但不是要提交的当前阶段的一部分 我如何知道哪些文件被跟踪 我如何知道
  • 使用 volley 以 json 格式将数据发送到服务器

    您好 我正在以 json 格式将数据发布到服务器 但它在错误响应中返回齐射服务器错误 RequestQueue queue Volley newRequestQueue this JSONObject jobj new JSONObject
  • 自定义html标签——有更好的方法吗?

    我正在尝试完成一个浏览器插件 它将分析文本并以某种方式标记它 基本上 假设您在浏览时发现页面中的某处出现了此文本 p and then Tom Cruise devoured the planet p 该插件正在扫描文本并会找到 Tom C
  • JS:将数组减少为嵌套对象

    所以我有这个数组 var mapped 2016 October Monday object 2017 January Friday object 2017 January Wednesday object 2017 October Mon
  • 勾画出图中的区域

    我有两个 2D numpy 数组 尺寸相同 我正在使用 matplotlib 绘制它们 我将第一个数组绘制为灰度彩色图 第二个代表光圈 但它是不规则形状 一些像素被勾勒出轮廓 它是形成轮廓的一组水平和垂直线 我不知道如何要求它绘制第二个数组
  • 多边形三角剖分的相反是什么?

    完成 2D 三角测量后 一些三角形具有相同的颜色 我想重新组合它们以绘制类似颜色的图形路径 我发现 如果我只是一一绘制三角形 一些图形渲染器会显示三角形之间的接缝 至少在涉及抗锯齿和 或透明度的情况下 那么 如何获取一组 不重叠 三角形并生
  • 使用 ctop.xsl 的内容 mathml 到中缀表示法未获得所需格式

    我正在尝试从内容 mathml 中制作数学符号或中缀表达式 我正在提供帮助ctop xsl为了这 ctop xsl Refer 可以解析得到表达式如下
  • 互斥锁所有权队列顺序

    假设我有三个线程 它们都通过互斥体访问相同的互斥部分 让我给你举这个例子 第一个线程探测互斥体并首先获取其所有权 THREAD 1 TIME 2013 03 13 01 00 00 000Z WaitForSingleObject hMut
  • 如何使用 OpenCV 检测白色斑点

    I paint a picture to test 我想知道黑色圆圈中有多少斑点以及每个斑点的大小是多少 所有斑点都是白色的 For example in this case I have 12 spots 我知道如何找到白色像素 并且很容
  • 获取TCL中执行代码的行号

    如何打印执行TCL脚本的行号 usr bin tclsh set a 100 set b 200 set c expr a b puts info script it will display the script name which i