将 tcl proc 的输出重定向到文件和输出(如 tee)
Redirecting output of tcl proc to file and output (like tee)
我需要 redirect
我在一次搜索中找到的:
redirect -tee LogFile.log {include ../RunDemoTests.tcl}
其中 include
是 TCL proc
而 ../RunDemoTests.tcl
是 proc 的参数。是否有我需要能够使用重定向的库,或者这不是通用的 tcl?
我在一个 EDA 工具环境中工作,该环境在 Windows 和 Linux 下运行,所以我需要一个仅 TCL 且不依赖于 OS 的解决方案].
我尝试了多种变体:
set ch [open |[list include "../OsvvmLibraries/UART/RunDemoTests.tcl"] r]
set lf [open build.log w]
puts "Starting"
puts $lf "Starting"
while {[gets $ch line]>=0} {
puts $line
puts $lf $line
}
close $lf
然而,这似乎只在命令来自 OS 环境时有效,例如:
set ch [open |[list cat ../tests.pro] r]
从这里打印可能有很多行,缓冲没问题,但不会收集整个文件然后打印,因为文件可能很长(180K 行)。
前一段时间在回答关于 comp.lang.tcl 的问题时,我创建了一个小的 Tcl 模块来提供 Tcl 中的 tee-like 功能。我现在已经在 Tcl wiki.
上发布了代码
你会这样使用它:
package require tee
tee stdout build.log
try {
puts "Starting"
include ../OsvvmLibraries/UART/RunDemoTests.tcl
} finally {
# Make sure the tee filter is always popped from the filter stack
chan pop stdout
}
这假定 include RunDemoTests.tcl
命令将输出输出到 stdout。
我需要 redirect
我在一次搜索中找到的:
redirect -tee LogFile.log {include ../RunDemoTests.tcl}
其中 include
是 TCL proc
而 ../RunDemoTests.tcl
是 proc 的参数。是否有我需要能够使用重定向的库,或者这不是通用的 tcl?
我在一个 EDA 工具环境中工作,该环境在 Windows 和 Linux 下运行,所以我需要一个仅 TCL 且不依赖于 OS 的解决方案].
我尝试了多种变体:
set ch [open |[list include "../OsvvmLibraries/UART/RunDemoTests.tcl"] r]
set lf [open build.log w]
puts "Starting"
puts $lf "Starting"
while {[gets $ch line]>=0} {
puts $line
puts $lf $line
}
close $lf
然而,这似乎只在命令来自 OS 环境时有效,例如:
set ch [open |[list cat ../tests.pro] r]
从这里打印可能有很多行,缓冲没问题,但不会收集整个文件然后打印,因为文件可能很长(180K 行)。
前一段时间在回答关于 comp.lang.tcl 的问题时,我创建了一个小的 Tcl 模块来提供 Tcl 中的 tee-like 功能。我现在已经在 Tcl wiki.
上发布了代码你会这样使用它:
package require tee
tee stdout build.log
try {
puts "Starting"
include ../OsvvmLibraries/UART/RunDemoTests.tcl
} finally {
# Make sure the tee filter is always popped from the filter stack
chan pop stdout
}
这假定 include RunDemoTests.tcl
命令将输出输出到 stdout。