有两种可能性。将它作为流水线运行(使用open |...
创建),并通过存储并打印它们来处理消息,或使用Unix tee
实用程序。第二种选择绝对简单!
# I like to spell out “update” in full
set cvsUpdStr [exec cvs -qn update | tee /dev/tty]
的tee
程序发送它的标准输入到其正常的标准输出加上指定的文件;我们使用/dev/tty
将其发送到当前终端。
但请注意,由于缓冲其输出,您可能会在cvs
的输出中产生长时间延迟。这只是C库的I/O处理向非终端发送输出时的默认行为,如果您立即需要输出,则可能会出现问题。修复此得到相当复杂(你最终使用期望),所以如果你满意的输出是突发性的,只是不要管它...
在Windows上,你需要做它的其他方式。
set pipe [open |[list cvs -qn update] "r"]
while {[gets $pipe line] >= 0} {
append cvsUpdStr "$line\n" ;# Note the \n at the end!
puts $line
}
close $pipe ;# Any errors turn up here!
与|[list ...]
的结构是在Tcl的条款相当不寻常的,但它是正确的在这种情况下使用。如果你在CVS的东西特别感兴趣(如果“文件名”来open
第一个字符是一个|
,争论的其余被视为参数列表用于建设管道。)
,你可能会看看tkcvs,因为它已经用Tcl包装了大多数CVS命令。 http://tksvn.tigris.org/source/browse/tksvn/trunk/tkcvs/ – schlenk