11

この質問は以前に何度も聞かれましたが、私はそれらの議論のいずれにおいても満足のいく答えを見つけられませんでした。

STDOUTに対してリアルタイムの測定値を生成するコマンドラインプロセスを起動し、ほぼ毎秒新しい結果を生成します。System.Diagnostics.Process.StandardOutputを使用すると、STDOUTデータがProcess.StandardOutput StreamReaderの4kバッファーを介して機能するため、完全に許容できないラグ(20秒以上)が発生します。これを回避する方法はないようです。

Process.StandardOutput.BaseStream.Flush()の呼び出しは機能しません。

Process.StandardOutputのバイトごとの同期読み取りを実行しようとしましたが、実際の出力よりも4k遅れています。

少なくとも、STDOUTのリダイレクトで発生しているすべてのバッファリングの問題をなんとかして克服し、シェルウィンドウに表示されたらすぐにアプリケーションでデータを受信できることを誰かが確認できますか?Processクラスから継承し、StandardOutputストリームリーダーの動作を変更できますか?生のWINAPI呼び出しを確認する必要がありますか?

どういうわけか、タスクを起動して出力を消費するためにアンマネージC ++を記述し、それをリンクすることになったとしても、これを実行する必要があります。私は私のウィットエンドにいます...

編集:私が必要としているのは、C / C ++、Perl、Python、およびJavaで使用できる「expect」ライブラリの.Net実装であるようです(これまでに見つけたのはこれらだけです)。そのような獣が存在するかどうか誰かが知っていますか?

4

1 に答える 1

1

「リダイレクトされていることに気付かないように起動する方法はありますか?」はい:それはまさにExpectのドメインです。.Netの実装がないことを知っています。それは確かに実行可能ですが...

于 2010-10-04T19:52:35.140 に答える