file - 如何将一系列命令的输出重定向到 stdout 和 Tcl 中的文件?

标签 file io tcl

我正在寻找一种优雅的方法,将输出从一系列命令重定向到 stdout,并在可能的情况下在 Tcl 中同时重定向到文件,而不是执行如下操作。

例如两步法

proc foo {} { return "bar" }
puts "I call foo"
foo

set i_f [open myfile w]
puts $i_f "I call foo"
exec echo [foo] >> myfile

如果我先写入然后打印该文件的内容,则读取和打印内容会花费更多时间,所以我想知道是否有一种优雅的方法可以同时写入两个 channel (写入一个 channel )打开文件进行写入并输出到标准输出)。

此外,我想知道是否可以暂时将当前的stdout更改为另一个 channel ,然后将stdout更改回原来的stdout。

有多个 Tcl 过程调用,所有调用都输出到 stdout(通过普通的 put 或通过 Tcllib 的报告包)。

我不想检查和更改每个 Tcl 过程的内容,而是将它们输出到另一个 channel 以写入文件,然后将标准输出更改为原始标准输出。

最佳答案

您可以创建一个新的puts命令来替换原来的puts。在新命令中,将消息放入标准输出和文件。

rename puts _puts  ;# Replace Tcl build-in puts
set chan_log [open log_file w]
# Create a new puts command
proc ::puts { msg } {
  ::_puts $msg
  ::_puts $::chan_log $msg
}

puts "Hello, world!"
close $chan_log

关于file - 如何将一系列命令的输出重定向到 stdout 和 Tcl 中的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75373729/

相关文章:

c++ - 如何创建一个 2MB 的数组或 vector 并用随机整数填充它

python - 读取文本文件并将文件从其中移动到目录

java - 如何使用输入文本文件创建邻接矩阵来表示有向加权图 [java]?

tcl - 在TCL中,当文件处于连续写入操作时,是否可以读取和编辑文件

linux - 可以期望产生一个 bash 函数吗?

c - C中不同文件中写入数据

file - 在 Unix 中根据模式重命名多个文件

java - 在Java中导入多个类文件

bash - 从内联 Expect 命令返回退出状态码

java - 如何查找没有扩展名的文件