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