Feedback

C# - Standardein- und ausgabe eines Prozesses umleiten

Veröffentlicht von am 13.12.2009
(2 Bewertungen)
Möchte man die Ausgabe eines (meist Konsolen-) Programms auslesen sobald es sich beendet hat, so muss der StandardOutput oder kurz StdOut des Prozesses umgeleitet werden. Die ReadProcessOutput-Methode erhält Dateiname und Argumente des aufzurufenden Programmes und liefert den StdOut als String nach Beendigung zurück.
Neben dem StandardOutput gibt es außerdem noch den StandardInput- (StdIn) und den StandardError-Stream (StdErr). Über den StdIn kann man dem laufenden Konsolenprozess Daten mitteilen, die normalerweise über die Tastatur eingegeben werden. Dies erlaubt die zweite Überladung der ReadProcessOutput-Methode. Die Verwendung des StdErr, in den Fehlermeldungen geschrieben werden, erfolgt analog zum StdOut, weswegen das Auslesen dessen nicht im Codebeispiel enthalten ist.

Möchte man bereits während der Prozess noch läuft auf den StdOut oder StdErr zugreifen, so ist dies ebenfalls möglich. Dazu den ReadToEnd-Aufruf ersetzen und stattdessen direkt mit der bereitgestellten StreamReader-Klasse arbeiten.

Prinzipiell besitzt jedes Programm die drei Standard-Streams, jedoch wird meist nur bei Konsolenprogrammen StdIn und StdOut (und in seltenen Fällen StdErr) verwendet.
using System.Diagnostics;

static string ReadProcessOutput(string fileName, string arguments)
{
    Process process = new Process();

    process.StartInfo.FileName = fileName;
    process.StartInfo.Arguments = arguments;
    process.StartInfo.UseShellExecute = false;
    process.StartInfo.RedirectStandardOutput = true;

    process.Start();

    string stdOut = process.StandardOutput.ReadToEnd();

    process.Close();

    return stdOut;
}

static string ReadProcessOutput(string fileName, string arguments, string stdIn)
{
    Process process = new Process();

    process.StartInfo.FileName = fileName;
    process.StartInfo.Arguments = arguments;
    process.StartInfo.UseShellExecute = false;
    process.StartInfo.RedirectStandardInput = true;
    process.StartInfo.RedirectStandardOutput = true;

    process.Start();

    process.StandardInput.Write(stdIn);
    process.StandardInput.Close();

    string stdOut = process.StandardOutput.ReadToEnd();

    process.Close();

    return stdOut;
}

Kommentare zum Snippet

 

Logge dich ein, um hier zu kommentieren!