子プロセスの標準ストリームをリダイレクトしたい(子プロセスの標準出力を読み取る・標準入力に書き込む)場合は、ProcessStartInfo.RedirectStandardOutputをtrue
にし、同時にProcessStartInfo.UseShellExecuteをfalse
にして子プロセスを起動します。
標準出力に書き込まれた内容を読み込むには、Process.StandardOutput.ReadToEndメソッドなどによって取得します。
子プロセスの標準出力をリダイレクトして標準出力に書き込まれた内容を読み込む
using System;
using System.Diagnostics;
class Sample {
static void Main()
{
// 子プロセスchild.exeの起動パラメータを作成する
var psi = new ProcessStartInfo("child.exe");
// シェルを使用せず子プロセスを起動する
// ⚠標準入出力をリダイレクトするために必要
// ⚠.NET Core/.NET 5以降ではデフォルトでfalseとなっているため、明示的に指定しなくても可
psi.UseShellExecute = false;
// 子プロセスの標準出力をリダイレクトする
psi.RedirectStandardOutput = true;
// 子プロセスを起動する
using (var child = Process.Start(psi)) {
// リダイレクトした子プロセスの標準出力からテキストを読み込む
var stdout = child.StandardOutput.ReadToEnd();
// 子プロセスの終了を待機する
child.WaitForExit();
// 読み込んだテキストを表示する
Console.WriteLine(stdout);
}
}
}
子プロセスの標準ストリームはProcess.StandardInput・Process.StandardOutput・Process.StandardErrorプロパティよりStreamReaderクラス/StreamWriterクラスとして取得することができます。 StreamReader/StreamWriterを使った読み書きについてはStreamReaderクラス・StreamWriterクラスを参照してください。
このほか、子プロセスの標準ストリームの扱い方や、非同期での標準ストリームへの読み書きなど、より具体的な方法は子プロセスの標準入出力で解説しています。