我在其中一个TCL脚本中遇到了问题。我需要在具有终止条件的无限循环中运行它,并且在每个循环中我需要编写一些输出。这是我使用的基本代码:
proc wr {i} {
puts -nonewline "$i"
}
proc do {roof} {
set end 0
while {$end < $roof} {
after 1000
wr $end
incr end
}
}
do 10
预期的行为是每秒都会有一个新的输出,直到$ end == $ roof。但是在运行此脚本之后,控制台窗口会忙碌10秒钟,之后,整个输出会立即打印出来。
感谢您的建议:)
答案 0 :(得分:3)
问题是你不能刷新stdout
。
如果您修改脚本以便刷新stdout
:
proc wr {i} {
puts -nonewline "$i"
flush stdout
}
proc do {roof} {
set end 0
while {$end < $roof} {
after 1000
wr $end
incr end
}
}
do 10
它会起作用。您还可以将stdout
频道的缓冲更改为无,默认为line
:
fconfigure stdout -buffering none
如果你写了多行,默认缓冲会在遇到换行符时刷新stdout,但你永远不会写一个换行符。