2013-09-03 16 views
7

Ich möchte die Standardausgabe des Prozesses in eine Zeichenfolge für späteres Parsing umleiten. Ich möchte auch die Ausgabe auf dem Bildschirm sehen, während der Prozess ausgeführt wird, und nicht nur, wenn es beendet wird ausgeführt wird.Redirect Prozessausgabe C#

Ist das überhaupt möglich?

+0

Bitte geben Sie genauer an, was Sie tatsächlich versuchen – Patel

+0

mögliche Duplikate von [C# Prozessausgabe während des Laufens erhalten] (http://stackoverflow.com/questions/11994610/c-sharp-get-process-output- während dem Rennen) –

Antwort

15

Verwenden Sie RedirectStandardOutput.

Beispiel von 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(); 

Auch OutputDataReceived und BeginOutputReadLine() für eine Alternative zu ReadToEnd() sehen, die besser Ihre „-Ausgabe sehen, während der Prozess läuft“ wird erfüllen Anforderung.

0

Wenn Sie eine exe von Ihrem C# Anwendung auszuführen und die Ausgabe bekommen von ihm, dann können Sie den Code unten verwenden

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); 
} 

Sie forgete nicht p.EnableRaisingEvents schreiben = true;