コンソールアプリの、標準出力への出力を受け取る

もくじ
https://tera1707.com/entry/2022/02/06/144447

やりたいこと

別のコンソールアプリのexeを実行したときに、

戻り値ではなくて、コマンドプロンプトで実行したときに黒窓に出てくるアレを受け取りたい。

例えば、ipconfigのコマンドだと、下記のような文字列を受け取りたい。

やり方

ProcessStartInfoのRedirectStandardOutputをtrueにしたものを、

Process.Start()に渡して実行させ、そのプロセスのStandardOutputを見る。

下記が、サンプルコード。

こちらのコードほぼそのまんまです。ありがとうございます。

using System.Diagnostics;

namespace ConsoleApp1
{
    internal class Program
    {
        static void Main(string[] args)
        {
            // 実行するファイル
            string command = @"TestProcess.exe";

            var psInfo = new ProcessStartInfo();

            psInfo.FileName = command;
            psInfo.CreateNoWindow = true;
            psInfo.UseShellExecute = false;

            psInfo.RedirectStandardOutput = true; // 標準出力をリダイレクト
            psInfo.RedirectStandardError = true;  // 標準エラー出力をリダイレクト

            var p = Process.Start(psInfo);
            string output = p.StandardOutput.ReadToEnd();   // 標準出力の読み取り
            string errOutput = p.StandardError.ReadToEnd(); // 標準出力の読み取り

            Debug.WriteLine(DateTime.Now.ToString() + " " + output);
            Debug.WriteLine(DateTime.Now.ToString() + " " + errOutput);
        }
    }
}

※↑で呼んでいる「TestProcess.exe」は、こちらで作ったものと同じ。

非同期版はこちら

https://tera1707.com/entry/2023/08/16/220208

参考

コンソール・アプリケーションの出力を取り込むには?

https://atmarkit.itmedia.co.jp/ait/articles/0710/11/news123.html