2011-07-17 25 views
5

私は状態を維持する(C#)コンソールアプリケーションを持っています。状態は、コンソールを介してさまざまな入力をアプリケーションに与えることによって変更できます。私は少しの入力でアプリケーションにフィードすることができるようにする必要がありますし、その後、出力リンスを読んで繰り返してください。入力をプロセスの標準入力に繰り返し入力する

私は新しいプロセスを作成し、入出力のリダイレクトの通常の作業をすべて行います。問題は、入力を送信してReadLine()を標準出力に呼び出すと、標準入力でClose()と呼び出す前に値を返さないため、入力ストリームにもう書き込めないことになります。

出力を受け取っている間に入力ストリームを開いたままにするにはどうすればよいですか?

var process = new Process 
          { 
           StartInfo = 
            { 
             FileName = 
              @"blabal.exe", 
             RedirectStandardInput = true, 
             RedirectStandardError = true, 
             RedirectStandardOutput = true, 
             UseShellExecute = false, 
             CreateNoWindow = true, 
             ErrorDialog = false 
            } 
          }; 


     process.EnableRaisingEvents = false; 

     process.Start(); 

     var standardInput = process.StandardInput; 
     standardInput.AutoFlush = true; 
     var standardOutput = process.StandardOutput; 
     var standardError = process.StandardError; 

     standardInput.Write("ready"); 
     standardInput.Close(); // <-- output doesn't arrive before after this line 
     var outputData = standardOutput.ReadLine(); 

     process.Close(); 
     process.Dispose(); 

私がIOをリダイレクトしているコンソールアプリケーションは非常に簡単です。これはConsole.Read()を使用してコンソールから読み取り、Console.Write()を使用して書き込みます。私は、標準出力/入力(.NETで書かれていない)を使用してそれから読み込む別のアプリケーションを持っているので、このデータは読み込み可能であることを確かに知っています。

答えて

4

Write("ready")を使用しているため、テキストに文字列を追加する代わりに、WriteLine("ready")を使用しています。それは簡単です:)。

+0

Noway!神様、あなたは正しいです。 \ r \ nが付いていないものを書く必要がある場合はどうすればいいですか?単一の '\ n'でLinuxスタイルをプリペンドするのと同じように。 –

+2

@Qua:代わりに 'Environment.NewLine'を使います.' Unix以外のプラットフォームの場合は" \ r \ n "、Unixプラットフォームの場合は" \ n "を含む文字列を使用します。check [msdn](http:// msdn.microsoft.com/en-us/library/system.environment.newline.aspx)。 –

+0

WriteLineは自動的にEnviromentを使用します.Newline? –

関連する問題