Wie bekomme ich die Ausgabe eines System.Diagnostics.Process?
Ich ausführen von ffmpeg wie diese:
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo = new System.Diagnostics.ProcessStartInfo(ffmpegPath, myParams);
p.Start();
p.WaitForExit();
... aber das problem ist, dass die Konsole mit ffmpeg öffnet sich und verschwindet sofort, also kann ich nicht keine Rückmeldung erhalten. Ich weiß gar nicht, ob der Prozess lief korrekt.
Also, wie kann ich entweder:
-
Sagen, die Konsole an bleiben geöffnet
-
Abrufen in C#, was die Konsole
angezeigt
InformationsquelleAutor der Frage marcgg | 2009-09-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was Sie tun müssen, ist die Erfassung der Standard-Output-stream:
Müssen Sie möglicherweise auch, etwas ähnliches zu tun mit
StandardError
. Sie können dann das tun, was Sie wollen, mitq
.Ist es ein bisschen pingelig, da entdeckte ich in der eine meiner Fragen
Als Jon Skeet hat darauf hingewiesen, es ist nicht klug, performance-Weise zu verwenden, die string-Verkettung wie diese; Sie sollte stattdessen mit einem
StringBuilder
:InformationsquelleAutor der Antwort Lucas Jones
Lucas' Antwort ist eine race-Bedingung: Wenn der Prozess schnell abgeschlossen, die while-Schleife verlassen (oder nie), auch wenn es einige Ausgabe-Links, das ist, könnten Sie verpassen auf einige Daten. Um zu verhindern, dass andere
ReadToEnd
getan werden sollte nach der Prozess beendet.(Beachten Sie, dass im Vergleich zu der alten version meiner Antwort, ich kann nicht mehr sehen die Notwendigkeit, für
WaitForExit
einmal dieprocess.HasExited
flag true ist, also das hinausläuft:)InformationsquelleAutor der Antwort chiccodoro
Für eine spezifische Antwort direkt mit ffmpeg, vorbei an der "Bericht" - Befehl in ffmpeg wird es dump ein Protokoll in das aktuelle Verzeichnis mit dem, was gesagt wurde in der Anzeige des Prozesses.
Vom FFMpeg-Dokumentation.
InformationsquelleAutor der Antwort Ben
Ich weiß, diese Frage ist alt, aber ich Stell es trotzdem.
Wenn alles, was Sie tun möchten, ist die Anzeige der Ausgabe eines Kommandozeilen-Prozess, und Sie laichen in dem Prozess von einem Konsole-Fenster, müssen Sie nur die Umleitung der standard-Eingabe (ja, ich weiß, es klingt falsch, aber es funktioniert).
Also:
Tun würde just fine.
InformationsquelleAutor der Antwort Michael Vasquez