2つの可能性があります。 (open |...
で作成された)パイプラインとして実行し、メッセージを格納して印刷したり、Unix tee
ユーティリティを使用してメッセージを受け取ったときに処理します。 2番目の選択肢は間違いなく簡単です!
# 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面でかなり珍しいですが、このような状況で使用するための正しいものです。 (open
に「ファイル名」の最初の文字が|
ある場合は、引数の残りがパイプラインを構築するために使用する引数のリストとして扱われます。)
あなたはCVSのもので特に興味を持っている場合は、 tkcvsを見ているかもしれません。すでにTclでほとんどのCVSコマンドをラップしています。 http://tksvn.tigris.org/source/browse/tksvn/trunk/tkcvs/ – schlenk