如何将 put 的输出作为输入提供给过程?

2024-01-06

我有一个将列表打印为格式化表格的过程。它有像 print_table $temp 这样的用例

我如何给出不同过程的输出,其中我使用“puts”命令打印输出作为该过程 print_table 的输入?

set list1 {{abc 1} {defg 2} {hijlk 3} {lmn 4}}
proc abc { list1 } {
foreach lst $list1 {
   puts "$lst"
}
}

> abc $list1 
abc 1
defg 2
hijlk 3
lmn 4

> print_table $list1
 ==============
 | abc    | 1 |
 | defg   | 2 |
 | hijlk  | 3 |
 | lmn    | 4 |
 ==============

我想让下面的工作

> print_table [abc $list1]
 ==============
 | abc    | 1 |
 | defg   | 2 |
 | hijlk  | 3 |
 | lmn    | 4 |
 ==============

正如 Donal 指出的,最好让打印代码使用通道作为参数。或者,如果您无法控制所有打印过程,或者您不想接触它们,则可以使用通道拦截器(之前介绍过,例如捕获 Tcl 测试套件输出 https://stackoverflow.com/questions/49728794/redirect-test-results-for-tcltest/49730358#49730358):

通道拦截器被实现为通道变换;并已被覆盖here https://stackoverflow.com/questions/14530354/stdout-redirection/14538125#14538125前。

第 1 步:定义通道拦截器

oo::class create ChannelSink {
    variable buffer
    method initialize {handle mode} {
        if {$mode ne "write"} {error "can't handle reading"}
        return {finalize initialize write}
    }
    method finalize {handle} {
        # NOOP
    }

    method write {handle bytes} {
        append buffer $bytes
        return $bytes
    }

    method getCapture {} {
         set r $buffer
         unset buffer
         return $r
    }
}

上面的代码片段是直接源自/窃取的Donal https://stackoverflow.com/questions/14530354/stdout-redirection/14538125#14538125.

第2步:注册拦截器stdout围绕你的打印代码

set cs [ChannelSink new]
chan push stdout $cs

abc $list1

chan pop stdout
print_table [$cs getCapture]

您可以将拦截样板打包到print_table,使其看起来像:print_table {abc $list1}.

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

如何将 put 的输出作为输入提供给过程? 的相关文章

  • 正则表达式在 Expect 缓冲区中查找字符串

    我正在尝试找到一个可匹配转义字符字符串的正则表达式 Expect 响应 请参阅这个问题 和一个六位数字 第一个字符为字母数字 这是我需要识别的整个字符串 r n u001b 1 14HX76196 最终我需要提取字符串 X76196 这是我
  • Mac OS X:我可以在应用程序包中编写应用程序文件吗?

    该应用程序将位于 Applications 中 该应用程序将通过网络浏览器而不是通过 App Store 下载 使用的语言是 Tcl Tk 答 这适用于所有版本的 OS X 10 5 或更高版本吗 B 有没有更好的地方来存储应用程序文件 L
  • 快速字符串替换

    在构建了一个可能非常大的字符串后 我将对其进行大量更改 将其中的单个字符 或字节 如果需要 更改为另一个字符 实际上 我的脚本正在构建一个填字游戏 因此字符串不会很长 但我的问题很笼统 我如何利用我不改变字符串 或任何更好的数据类型 长度的
  • 限制滚动条长度

    我正在尝试使用 Perl Tk 创建一个像 GUI 一样的简单记事本 我已经用过Scrolled小部件来创建一个Text带有两个滚动条的小部件 一个在右侧 一个在底部 两个滚动条相遇的地方如下所示 不过 我想让它看起来像微软的 记事本 应用
  • 为什么 TCL 脚本中的数组大小没有通过数组大小 正确给出

    这里我有一个包含 4 个元素的数组 但它打印的值为 11 那么大小如何变成 11 而不是 4 array set ipname UART TEST SPI I2C set bsize array size ipname puts bsize
  • 如何在 tcl 中使用 split 删除不需要的字符

    这是一个例子 Interface IP Address OK Method Status Protocol FastEthernet0 0 unassigned YES unset administratively down down Fa
  • 生成和执行之间有什么区别?

    我正在学习编写 TCL 期望 脚本 我注意到一些示例显示了如何使用 spawn 而其他示例则显示了命令 exec 我尝试谷歌搜索 但找不到有什么区别 假设我在一个很长的期望脚本中间调用 exec 我会期望发生什么 spawn is an e
  • 使用 tkinter 时如何将 tcl 中的 stdout 获取到 python 字符串变量中?

    我有以下 python 代码 import Tkinter root Tkinter Tk root tk eval puts printed by tcl 它会在屏幕上打印 printed by tcl 如何将 tcl 解释器打印到屏幕上
  • 将其放入 TCL 正则表达式中的转义字符串

    I use Expect作为测试框架并编写一些辅助函数来简化匹配模式的键入expect命令 因此 我寻找将任何字符串转换为字符串的函数 其中所有特殊的正则表达式语法都被转义 例如 和其他字符 这样我就可以将任何字符串放入正则表达式中 而不必
  • tcl:如何使用变量的值创建新变量

    这是我正在尝试做的一个例子 set t SNS set t top commands that return value 想要获取存储在 t top 的信息 puts t top SNS top really want the data s
  • 如何使用tcl中的puts更改文本颜色

    我想通过使用 tcl 中的 put 命令来更改控制台中显示的文本颜色以简化调试 我看到很多文章是 abt tk 而不是 tcl 仅供参考 我在 Windows 7 上使用 Active tcl 我尝试过其他人提供的以下代码 http www
  • tkinter - wm 协议不处理 WM_HELP 消息

    tkinter 只处理已知协议吗 如果是这样 那对我来说似乎没什么用 如果不是 我不确定为什么这段代码在微软下对我有用 import tkinter as tk def lol print hi root tk Tk menu tk Men
  • 在单独线程中创建的 Tcl Interp 会共享任何全局数据吗?

    在我的 C 代码中 如果我为每个线程创建一个 tcl interp 并将其用于 Tcl EvalEx 脚本 并通过 Tcl GetStringResult 获取结果 那么该线程安全吗 除了 const 数据之外 这些线程之间没有共享数据 经
  • 按值对 Tcl 字典排序

    我想知道 Tcl 中是否有一种按值对 dict 进行排序的优雅方法 假设我有以下字典 set d1 dict create k1 10 k2 89 k3 1 k4 15 k5 20 Results in dict of form k1 gt
  • 如何使用 Python 在同一 TCL shell 上运行命令

    我所有的库都是用 TCL 编写的 我想用 Python 创建一个 GUI 其中有几个按钮和其他选项 在启动时TCL shell会打开 当我单击按钮时 将在 TCL shell 上执行相应的命令 是否可以在不关闭 TCL shell 的情况下
  • 无法读取:变量不是数组

    我有以下代码 set arr1 a1 t1 set arr2 a2 t2 set l1 lappend l1 arr1 lappend l1 arr2 set arr3 a3 l1 foreach names array names arr
  • 文件名中 TCL 通配符/glob 的使用

    我有这样的代码 proc myProc first last for set i first i lt last incr i set i cur PlainText i
  • 在 C 程序中使用 tcl 和 tk 存根

    我需要一个简单的 C 程序来创建 tcl 解释器 初始化 tcl 和 tk 然后加载给定的 tcl tk 脚本 我想使用 tcl 和 tk 存根 以确保程序将在具有不同版本的 tcl tk 的计算机上运行 我将使用这个程序而不是运行wish
  • 从 Bash 调用的 Expect 脚本的退出状态代码

    我制作了一个 Bash 脚本 它使用 Expect 脚本来自动进行 ssh 登录 该脚本连接到多个服务器并运行一些命令 bash 脚本会提示输入一次登录凭据 我想合并一个功能 其中如果第一个服务器登录失败 脚本将终止 以避免脚本检查下一个服
  • TCL 脚本 - exec 将文本刷新到我的标准输出

    我怎样才能 冲洗 stdout of the exec命令到我的脚本stdout没有 等待 结果执行返回 例如在下面的脚本中我想要git clone输出立即出现在我的脚本上下文中 usr bin tclsh git outputs prog

随机推荐

  • 警告消息行号 R

    我有一个大的 for 循环 循环了数百次 最后它产生了这个警告 Warning messages 1 In min j na rm TRUE no non missing arguments to min returning Inf 有什么
  • 随机选择一组不同整数的最有效方法

    我正在寻找最有效的算法来随机选择一组 n 个不同的整数 其中所有整数都在某个范围 0 maxValue 内 限制条件 maxValue 大于 n 并且可能大得多 我不在乎输出列表是否已排序 所有整数必须以相同的概率被选择 我最初的想法是构造
  • Java、JDBC INSERT ON DUPLICATE KEY UPDATE 通配符

    我有一个下一个 SQL 查询 const val INSERT OR UPDATE ITEM SQL INSERT INTO items owner id object id item id count enchant level item
  • 如何在JavaFX中的VBox中移动项目(通过拖动更改顺序)?

    我想在 VBox 中拖动 TitledPane VBox 中有 n 个 Titlepane 我想在拖动时更改它们的顺序 我尝试了一些 MouseEvents 和 DragEvents 但它不适合我 但我需要 Titledpane 移动到哪个
  • Matplotlib.pyplot:如何为现有绘图设置第二个 y 轴

    我有两组线性相关的值 因此 我只需要一个带有第二个 y 轴且比例正确的图表 最优雅的方法是什么 只制作两个条形图就会产生重叠 import numpy as np import matplotlib pyplot as plt x np a
  • 正则表达式匹配 CSS 中任何“未使用”的规则(类、id 等)

    我有一个巨大的 CSS 文件 我想将其缩减为仅使用的 CSS 规则 我通过使用做到了这一点CSS 使用插件 https addons mozilla org en US firefox addon css usage 对于萤火虫 它为每个未
  • Android NDK OpenGL 应用程序的浮点还是定点?

    我正在尝试决定是否对我的应用程序 大部分是 C 中的所有 3D 相关元素主要使用浮点数还是整数 据我所知 大多数基于 ARM 的设备没有硬件浮点支持 因此我认为任何使用浮点的繁重工作都会明显变慢 然而 我计划在大部分情况下准备所有数据 即在
  • TeamCity LocalService PFX 程序集签名 - 在何处安装证书

    我一直在研究这个问题 虽然我找到了一些 解决方案 但似乎很多 解决方案 都是偶然发现的 或者无法充分解释真正有效的方法 我已经尝试了多种解决方案 但仍然遇到问题 我在 Visual Studio 中创建了一个 PFX TeamCity 和
  • Facebook 延迟深度链接在 iOS 上是否有效?如何在应用商店发布应用程序之前对其进行测试?

    我在 iOS 上遇到 Facebook 延迟深度链接问题 深层链接有效 但延迟深层链接不起作用 我已经阅读了很多关于这个问题的内容 但仍然找不到解决方案 我已经设置了深层链接并且有效 当我也尝试测试深度链接时应用广告助手 https dev
  • 在 Sequelize Model.create 上设置 raw = true

    我希望能够在调用后接收普通的原始对象Model create在 Sequelize 上 创建的对象本身 没有元数据或任何其他东西 就像 raw true 选项中Model find 我已经看过这个答案 将所有查询设置为 raw true S
  • 在 NetworkX 中同时创建属性和边(如果存在相同的属性)

    在 NetworkX 中创建节点后 如果两个节点 至少 具有一个重叠的相同属性 我想在节点之间添加边 这似乎是一个问题 并非所有节点都包含相同数量的属性 可能是这种情况 如果是 我应该如何解决 import networkx as nx f
  • Java 获取默认 UI 颜色

    例如 我如何找到 JList 中的默认选择颜色 这些颜色存储在哪里 对于 Swing 组件 您可以在应用程序范围内获取和设置默认颜色UIDefaults http download oracle com javase 6 docs api
  • 刷新令牌如何比长期存在的 JWT 更安全?

    在将 JWT 与自然不安全的客户端 浏览器 手机等 一起使用时 我很难理解刷新令牌的使用 对我来说 如果 JWT 被泄露 那么刷新令牌也不会被泄露 这种想法似乎很天真 只要刷新令牌保持有效 攻击者本质上就拥有无限的 JWT 来源 即使您使使
  • Sql 密码生成器 - 8 个字符,大写和小写,包括数字 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我需要在 SQL 中创建一个新密码
  • 类声明与构造函数内初始化对象的区别

    我正在为我的对象进行对象初始化和构造函数初始化 但无法得到我的问题的准确答复 这里Case1和Case2有什么区别 Case 1 namespace ConsoleApplication2 class MyBuilder private M
  • 覆盖我的可观察变量会杀死当前订阅者吗?

    我希望能够缓存 http 调用 但也强制刷新缓存 我的服务如下所示 Injectable export class UserService private currentUser Observable
  • 如何在 python 多处理中创建共享的二维数组

    我需要使用 python 的多重处理来处理一个大矩阵 这就是说我需要二维数组 该数组应该由不同的子进程以同步方式共享 访问 更新 因此我使用mp Manager 在创建数组时 multiprocess Array 让我创建一个一维数组 我尝
  • .NET 的自然语言日期/时间解析器? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有谁知道 NET 日期 时间解析器类似于Ruby 的慢性病 http chronic rubyforg
  • 如何禁用 UIButton?

    我正在开发一个项目 其中我必须在 plist 中显示照片库的所有照片 并在UIButtons 我的应用程序还将有一个编辑按钮 当用户单击此按钮时 每个按钮上应显示删除标记 例如通常出现在其他 iPhone iPad 应用程序中 但关键的是
  • 如何将 put 的输出作为输入提供给过程?

    我有一个将列表打印为格式化表格的过程 它有像 print table temp 这样的用例 我如何给出不同过程的输出 其中我使用 puts 命令打印输出作为该过程 print table 的输入 set list1 abc 1 defg 2