Tcl 将标准输出重定向到文件不产生任何输出
Tcl redirect stdout to file produces no output
问题是 link 中回答内容的扩展。在尝试使用它来延迟打印输出时,shell 上的 cat file_name
在使用 after
的延迟时间内不会显示文件的内容。这是代码:
proc foo {times} {
while {$times >0} {
puts "hello$times"
incr times -1
after 20000
puts "hello world"
}
}
proc reopenStdout {file} {
close stdout
open $file w ;# The standard channels are special
}
reopenStdout ./bar
foo 10
您正在写入的数据正在内存中缓冲,您写入的数据不足以将内部缓冲区刷新到磁盘。在 foo
的循环内添加一个 flush stdout
,或者做一些类似设置新打开的通道为行缓冲的事情:
proc reopenStdout {file} {
close stdout
set ch [open $file w] ;# The standard channels are special
chan configure $ch -buffering line
}
如果行缓冲不够,您可以使用 chan configure
的 -buffering
and -buffersize
选项来获得最适合您需求的行为。
问题是 link 中回答内容的扩展。在尝试使用它来延迟打印输出时,shell 上的 cat file_name
在使用 after
的延迟时间内不会显示文件的内容。这是代码:
proc foo {times} {
while {$times >0} {
puts "hello$times"
incr times -1
after 20000
puts "hello world"
}
}
proc reopenStdout {file} {
close stdout
open $file w ;# The standard channels are special
}
reopenStdout ./bar
foo 10
您正在写入的数据正在内存中缓冲,您写入的数据不足以将内部缓冲区刷新到磁盘。在 foo
的循环内添加一个 flush stdout
,或者做一些类似设置新打开的通道为行缓冲的事情:
proc reopenStdout {file} {
close stdout
set ch [open $file w] ;# The standard channels are special
chan configure $ch -buffering line
}
如果行缓冲不够,您可以使用 chan configure
的 -buffering
and -buffersize
选项来获得最适合您需求的行为。