如何抑制 TCL 程序的输出消息?

2023-12-07

在我的 TCL 脚本中,我使用了几个没有源代码的过程。所有这些过程都会执行一些任务并输出大量消息。但我只想完成任务,并且想抑制这些消息。有没有办法做到这一点。

例如,我想运行这样的程序:

my_proc $arg1 $arg2 $arg3

并压制所有的消息。任何解决方法/明智的替代方案都会受到赞赏。

更多信息:我正在使用自定义 shell,它接受 TCL 文件作为参数并运行它。在这个自定义 shell 中,我可以访问一些我没有代码的 TCL 程序。

或者甚至有什么方法可以让脚本的输出转到文件而不是命令提示符(stdout)?


尝试改变puts在你的代码中:

rename ::puts ::tcl_puts
proc puts args {}        ;# do nothing

然后,如果你想打印一些东西,使用tcl_puts

这有点像核选择。你可以变得更微妙:

proc puts args {
    if {[llength $args] == 1} {
        set msg [lindex $args 0]
        # here you can filter based on the content, or just ignore it
        # ...
    } else {
        # in the 2a\-args case, it's file io, let that go
        # otherwise, it's an error "too many args"
        # let Tcl handle it
        tcl_puts {*}$args

        # should probably to stuff there so that errors look like
        # they're coming from "puts", not "tcl_puts"
    }
}

另一个想法:只需在您调用的命令期间执行此操作即可:

proc noputs {args} {
    rename ::puts ::tcl_puts
    proc ::puts args {}

    uplevel 1 $args

    rename ::puts ""
    rename ::tcl_puts ::puts
}

noputs my_proc $arg1 $arg2 $arg3

Demo:

$ tclsh
% proc noputs {args} {
    rename ::puts ::tcl_puts
    proc ::puts args {}

    uplevel 1 $args

    rename ::puts ""
    rename ::tcl_puts ::puts
}
% proc my_proc {foo bar baz} {
    lappend ::my_proc_invocations [list $foo $bar $baz]
    puts "in myproc with: $foo $bar $baz"
}
% my_proc 1 2 3
in myproc with: 1 2 3
% noputs my_proc a b c
% my_proc x y z
in myproc with: x y z
% set my_proc_invocations
{1 2 3} {a b c} {x y z}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何抑制 TCL 程序的输出消息? 的相关文章

  • 如何在Tcl中安装软件包?

    我正在尝试安装critlib在我的机器上 http equi4 com critlib http equi4 com critlib 这样我就可以在 Tcl 中动态创建 zip 文件 问题是我不知道如何安装 Tcl 软件包 您是否有放置文件
  • Strawberry Perl v5.30.0 无法安装 Tcl (Windows 10)

    我从下载并安装了草莓 perl 5 30 0 1 64bit msi草莓perl com http strawberryperl com 在我的 Windows 10 上并尝试使用 cpan 安装 Tcl 模块 但由于缺少 tclsh 而失
  • Tcl 扩展:扩展的 ClientData 的生命周期

    重要的本机扩展将需要每个解释器的数据 动态分配的结构 我目前正在使用Tcl SetAssocData 有一个对应的密钥 扩展名和适当的删除例程 以防止此内存泄漏 然而 Tcl PkgProvideEx 也允许记录这样的 信息 该信息可以通过
  • 在 Mac 10.9.2 上安装 WordNet

    我正在尝试在 Mac 操作系统 10 9 2 上安装 WordNet 我尝试过以下方法 配置 make 但期间make我遇到了一些错误 然后我安装了XQuartz 2 7 5 我仍然遇到一些错误make 接下来 我安装了 Xcode 但这仍
  • 卸载活动 TCL Mac

    我正在尝试在 Mac 上卸载 Active TCL 但网站提供的代码不起作用 我收到错误消息 指出不是目录 当我查看代码提供的文件路径时 我可以手动查找 但它不起作用 还有其他方法可以摆脱这个吗 以下是提供的代码 cd Library Fr
  • 快速字符串替换

    在构建了一个可能非常大的字符串后 我将对其进行大量更改 将其中的单个字符 或字节 如果需要 更改为另一个字符 实际上 我的脚本正在构建一个填字游戏 因此字符串不会很长 但我的问题很笼统 我如何利用我不改变字符串 或任何更好的数据类型 长度的
  • 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 正则表达式中的转义字符串

    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
  • tkinter - wm 协议不处理 WM_HELP 消息

    tkinter 只处理已知协议吗 如果是这样 那对我来说似乎没什么用 如果不是 我不确定为什么这段代码在微软下对我有用 import tkinter as tk def lol print hi root tk Tk menu tk Men
  • 黑莓开发上的脚本语言?

    据我所知 开发 Blackberry 应用程序的首选方法是 Java 这是吗only way 我梦想有一个快速的应用程序环境 您可以在其中创建 GUI 使用 Blackberry UI 组件 类似于 Blackberry 上的 Tcl Tk
  • 如何使用 Python 在同一 TCL shell 上运行命令

    我所有的库都是用 TCL 编写的 我想用 Python 创建一个 GUI 其中有几个按钮和其他选项 在启动时TCL shell会打开 当我单击按钮时 将在 TCL shell 上执行相应的命令 是否可以在不关闭 TCL shell 的情况下
  • tcl 暂停并等待按键继续

    我正在 tcl 中寻找一种方法来暂停脚本 例如在使用 puts 进行一些输出之后 并等待用户按下按键 然后再继续输出剩余的文本 你只需使用gets从标准输入读取 proc pause message Hit Enter to continu
  • 在 C 程序中使用 tcl 和 tk 存根

    我需要一个简单的 C 程序来创建 tcl 解释器 初始化 tcl 和 tk 然后加载给定的 tcl tk 脚本 我想使用 tcl 和 tk 存根 以确保程序将在具有不同版本的 tcl tk 的计算机上运行 我将使用这个程序而不是运行wish
  • 在 Eclipse 中的调试会话期间记录所有跟踪信息

    我想记录调试会话的每个步骤的所有调试信息 以便稍后处理所有这些数据 例如调用的方法的名称 参数值 所有变量值等 有没有任何选项可以实现此目的 我应该在哪里更改代码才能实现此目的 一件重要的事情 它不是一个 java 程序 这是一个使用 ac
  • 如何在 {expect} 脚本中创建“循环”语句?

    假设是 这是脚本 usr bin expect set a test 我想在这个脚本中创建一个循环 以便它可以打印值 a 前面有一个基于循环的数字 所以如果我想让它循环3次 最终产品将变成 1 test 2 test 3 test 您可以使
  • (Tcl/Expect) 退出后清屏

    我想在退出我的 半 交互式期望脚本后清除屏幕 在本地计算机上 我可以在脚本中做到这一点吗 这是我尝试过的 但失败了 usr bin expect f set env TERM vt100 spawn ssh Y username domai
  • 在退出脚本之前等待后台进程完成

    在退出脚本 TCL Bash 之前 如何确保所有后台进程已完成执行 我正在考虑将所有后台进程 pid 写入 pid 文件 然后最后 pgrep pidfile 以查看在退出之前是否有任何进程仍在运行 有一些更简单的方法可以做到这一点吗 TC
  • TCL 中的 if 语句

    我对以下代码的 tcl 中的 if 语句有疑问 if number 1 name hello number 0 name yes do something here 上面的代码是有效的 但是如果我这样写 if number 1 name h
  • 如何从 tcl 脚本运行 csh 脚本?

    我正在尝试从 tcl 脚本运行 csh 脚本 下面的 tcl 脚本调用 csh 脚本 usr bin tclsh set scripts path scratch TCL scripts scripts adders set synthes

随机推荐