17

I would like to redirect the Process's standard output to a string for later parsing. I would also like to see the output on the screen, while the process is running, and not only when it finishes it's run.

Is that even possible?

Idanis
  • 1,918
  • 6
  • 38
  • 69
  • Please provide more detail on what actually you are trying to do – Ronak Patel Sep 03 '13 at 09:31
  • possible duplicate of [C# get process output while running](http://stackoverflow.com/questions/11994610/c-sharp-get-process-output-while-running) – Sriram Sakthivel Sep 03 '13 at 09:38
  • I think the following are also relevant. [c# - ProcessStartInfo hanging on "WaitForExit"? Why?](https://stackoverflow.com/questions/139593/processstartinfo-hanging-on-waitforexit-why) - [c# - Best way to interact with Command Line application](https://stackoverflow.com/questions/442680/best-way-to-interact-with-command-line-application) - [C# : Redirect console application output : How to flush the output?](https://stackoverflow.com/questions/1033648/c-sharp-redirect-console-application-output-how-to-flush-the-output) – Sam Hobbs Jan 11 '19 at 23:03
  • But wait, there are more: [redirect - C# - Realtime console output redirection](https://stackoverflow.com/questions/4501511/c-sharp-realtime-console-output-redirection") - [c# - How can I redirect process output (console) to richtextbox?](https://stackoverflow.com/questions/6521475/how-can-i-redirect-process-output-console-to-richtextbox") - [c# - StandardOutput.ReadToEnd() hangs](https://stackoverflow.com/questions/7160187/standardoutput-readtoend-hangs") – Sam Hobbs Jan 11 '19 at 23:08

2 Answers2

27

Use RedirectStandardOutput.

Sample from MSDN:

// Start the child process.
Process p = new Process();
// Redirect the output stream of the child process.
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.FileName = "Write500Lines.exe";
p.Start();
// Do not wait for the child process to exit before
// reading to the end of its redirected stream.
// p.WaitForExit();
// Read the output stream first and then wait.
string output = p.StandardOutput.ReadToEnd();
p.WaitForExit();

Also see OutputDataReceived and BeginOutputReadLine() for an alternative to ReadToEnd(), that will better fulfill your "see output while the process is running" requirement.

nmaier
  • 32,336
  • 5
  • 63
  • 78
4

If you want to execute an exe from your c# application and get the output from it then you can use the below code

System.Diagnostics.Process p = new System.Diagnostics.Process();            

p.StartInfo.FileName = "PATH TO YOUR FILE";
p.StartInfo.UseShellExecute = false;
p.StartInfo.Arguments = metalType + " " + graphHeight + " " + graphWidth;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;              

p.EnableRaisingEvents = true;
p.Start();            
svgText = p.StandardOutput.ReadToEnd();

using(StreamReader s = p.StandardError)
{
    string error = s.ReadToEnd();
    p.WaitForExit(20000);
}

Don't forgete to write p.EnableRaisingEvents = true;

redspidermkv
  • 503
  • 10
  • 25
Ronak Patel
  • 2,570
  • 17
  • 20