web-dev-qa-db-ja.com

プロセス出力C#をリダイレクトする

後で解析するために、プロセスの標準出力を文字列にリダイレクトしたいと思います。また、プロセスの実行が終了したときだけでなく、プロセスの実行中にも画面に出力を表示したいと思います。

それも可能ですか?

11
Idanis

RedirectStandardOutput を使用します。

MSDNからのサンプル:

_// Start the child process.
Process p = new Process();
// Redirect the output stream of the child process.
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.FileName = "Write500Lines.exe";
p.Start();
// Do not wait for the child process to exit before
// reading to the end of its redirected stream.
// p.WaitForExit();
// Read the output stream first and then wait.
string output = p.StandardOutput.ReadToEnd();
p.WaitForExit();
_

BeginOutputReadLine()の代替として、 OutputDataReceived および ReadToEnd() も参照してください。プロセスの実行中」の要件。

20
nmaier

C#アプリケーションからexeを実行して出力を取得する場合は、次のコードを使用できます。

System.Diagnostics.Process p = new System.Diagnostics.Process();            

p.StartInfo.FileName = "PATH TO YOUR FILE";
p.StartInfo.UseShellExecute = false;
p.StartInfo.Arguments = metalType + " " + graphHeight + " " + graphWidth;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;              

p.EnableRaisingEvents = true;
p.Start();            
svgText = p.StandardOutput.ReadToEnd();

using(StreamReader s = p.StandardError)
{
    string error = s.ReadToEnd();
    p.WaitForExit(20000);
}

P.EnableRaisingEvents = true;と書くことを忘れないでください。

3
Ronak Patel