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]

VB.NET Einführung

Die Schulung zeigt Ihnen, wie Sie einfache, benutzerorientierte Programme, die auf Datenbanken zugreifen, in VB.NET eigenständig entwickeln. 

XML und .NET Überblick

Um auf dem neuesten Wissensstand zu sein, sollten Sie unser aktuelles ASP .NET Komplett Seminar belegen.
Nach dem Seminar kennen Sie die wichtigsten Strömungen in der Software-Technologie

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!