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.
GFU-Schulungen  [Anzeige]

Visual Studio Team Foundation Server 2017/2015 (TFS) für Administratoren - Kompakt

Nach dieser Schulung beherrschen Sie die Grundlagen des TFS. Sie erledigen administrative Aufgaben schnell und sicher.

Visual Studio Team Foundation Server 2017/2015 (TFS) für Projektmitglieder - Kompakt

Nach Teilnahme an dieser Schulung sind Ihnen die Grundlagen von ALM geläufig. Sie planen und steuern Projekte effizient mit dem Visual Studio Team Foundation Server.

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!