tcl exec コマンドが最初に stdout から文字列を返し、次に stderr を返すことがわかりました。たとえば、次の「テスト スクリプト」は、次の順序でメッセージを生成します。
puts "test started"
puts stderr "some non-fatal error goes to stderr"
puts "test passed"
次に、次のようにスクリプトを実行します。
set ret [ catch { exec sh -c $cmd } msg ]
$msg から得られるものは次のとおりです。
test started
test passed
some non-fatal error goes to stderr
これにより、正しい結果を得ることが本当に難しくなっています。
stdout と stderr の両方からメッセージを順番に取得できるかどうかを誰かに教えてもらえますか?
1) このようにリダイレクトしないでください。実際にすべてを順番に取得できます。
set ret [ catch {exec $cmd >&log.txt} msg ]
2) Tcl スクリプトでそのTcl スクリプトを呼び出す必要があります。申し訳ありません。
3) .tcl テスト スクリプトを直接ソースすることもできません。これは、2 つの間で呼び出される他のスクリプトがあり、私の tcl スクリプトがそのtcl スクリプトをソースするだけでは機能しないためです。
私はtclsh 8.3を使用しています
これがあまりにも多くを求めているかどうかはわかりません。誰かがこれを理解してくれることを願っています。ありがとう。