Process.start: how to get the output?

后端 未结 9 1544
無奈伤痛
無奈伤痛 2020-11-21 23:56

I would like to run an external command line program from my Mono/.NET app. For example, I would like to run mencoder. Is it possible:

  1. To get
9条回答
  •  故里飘歌
    2020-11-22 00:59

    Alright, for anyone who wants both Errors and Outputs read, but gets deadlocks with any of the solutions, provided in other answers (like me), here is a solution that I built after reading MSDN explanation for StandardOutput property.

    Answer is based on T30's code:

    static void runCommand()
    {
        //* Create your Process
        Process process = new Process();
        process.StartInfo.FileName = "cmd.exe";
        process.StartInfo.Arguments = "/c DIR";
        process.StartInfo.UseShellExecute = false;
        process.StartInfo.RedirectStandardOutput = true;
        process.StartInfo.RedirectStandardError = true;
        //* Set ONLY ONE handler here.
        process.ErrorDataReceived += new DataReceivedEventHandler(ErrorOutputHandler);
        //* Start process
        process.Start();
        //* Read one element asynchronously
        process.BeginErrorReadLine();
        //* Read the other one synchronously
        string output = process.StandardOutput.ReadToEnd();
        Console.WriteLine(output);
        process.WaitForExit();
    }
    
    static void ErrorOutputHandler(object sendingProcess, DataReceivedEventArgs outLine) 
    {
        //* Do your stuff with the output (write to console/log/StringBuilder)
        Console.WriteLine(outLine.Data);
    }
    

提交回复
热议问题