定期运行TCL脚本并获得连续结果

时间:2014-09-23 10:40:50

标签: while-loop tcl infinite-loop

我在其中一个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秒钟,之后,整个输出会立即打印出来。

感谢您的建议:)

1 个答案:

答案 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,但你永远不会写一个换行符。