2010-02-05 5 views
6

Ich verwende den LAME-Befehlszeilen-MP3-Encoder in einem Projekt. Ich möchte sehen können, welche Version jemand benutzt. wenn ich ohne Paramater nur lame.exe ausführen ich erhalte, zum Beispiel:Wie erfasse ich Kommandozeilen-Text, der nicht an stdout gesendet wird?

C:\LAME>LAME.exe 
LAME 32-bits version 3.98.2 (http://www.mp3dev.org/) 

usage: blah blah 
blah blah 

C:\LAME> 

wenn ich versuche, die Ausgabe in eine Textdatei umleiten mit> in eine Textdatei der Textdatei leer ist. Wo ist dieser Text zugänglich, wenn er mit System.Process in C# ausgeführt wird?

Antwort

0

Es ist mit stderr mit aus. cmd.exe erlaubt es nicht, stderr umzuleiten, und die einzige Möglichkeit, die ich jemals umgeleitet habe, ist mit einem djgpp-Tool.

+0

kann ich das in C# mit System.Process sehen? Ich werde das jetzt sehen, danke. – Dave

+0

Nun, vielleicht irre ich mich, diese http://support.microsoft.com/kb/110930 sagt, dass Sie stderr jetzt umleiten können. –

+0

das war immer mit cmd möglich –

3

Es kann zu stderr anstelle von stdout ausgegeben werden. Sie können redirect stderr, indem Sie:

LAME.exe 2> textfile.txt 

Wenn dies Sie Informationen zeigt, dann wird LAME auf die Standardfehlerstrom ausgegeben wird. Wenn Sie einen Wrapper in C# schreiben, können Sie die standard error umleiten und Streams von ProcessStartInfo ausgeben.

1
 System.Diagnostics.Process proc = new System.Diagnostics.Process(); 
     proc.EnableRaisingEvents = false; 
     proc.StartInfo.FileName = @"C:\LAME\LAME.exe"; 
     proc.StartInfo.RedirectStandardError = true; 
     proc.StartInfo.UseShellExecute = false; 

     proc.Start(); 
     string output = proc.StandardError.ReadToEnd(); 


     proc.WaitForExit(); 

     MessageBox.Show(output); 

gearbeitet. Danke allen!