有兩種可能性。將它作爲流水線運行(使用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