[Mona] [C#] 標準出力の読み込み

Monaもこのへんの操作が似たようなAPIでできると面白いなぁ
Monaに落とし込んだ時の実装もだいたい想像がつくのでいけるかな?
また例のごとく解説なしにソースを貼っておこう


と思ったけどそれもあんまりなので・・・
メインプロセスから、別exeを起動します。その別exeの標準出力をメインプロセスでReadしてコンソールに出力しています。これで標準出力をReadする方法が分かったので明日以降にチャレンジするつもりの機能と組み合わせる予定。


hoge.exe ls -lとかすると面白い。(何の役にも立たないけど)

#region Using directives

using System;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics;
using System.Threading;

#endregion

namespace ExecAndReadStdout
{
    class Program
    {
        static void Main(string args)
        {
            Program program = new Program();
            program.Do(args);
        }

        private String readResult;

        void Do(String args)
        {
            if (args.Length < 1)
            {
                System.Console.WriteLine("ExecAndReadStdout.exe cmd options");
                return;
            }

            Process process = new Process();
            ProcessStartInfo info = process.StartInfo;

            info.FileName        = args[0];
            info.CreateNoWindow  = true;
            info.UseShellExecute = false;
            info.RedirectStandardOutput = true;
            info.RedirectStandardError  = true;
            for (int i = 1; i < args.Length; i++)
            {
                info.Arguments += args[i] + " "; // tenuki
            }

            process.Start();
            Thread readThread = new Thread(new ParameterizedThreadStart(Read));
            readThread.Start(process);
            
            readThread.Join();
            process.WaitForExit();

            // result
            System.Console.WriteLine(this.readResult);
        }

        void Read(Object obj)
        {
            Process process = obj as Process;
            this.readResult = process.StandardOutput.ReadToEnd();
        }
    }
}