我正在寻找一种优雅的方法,将输出从一系列命令重定向到 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/