2010-02-05 13 views
6

Używam kodera mp3 linii poleceń LAME w projekcie. Chcę móc zobaczyć, jakiej wersji używa ktoś. gdybym tylko wykonać LAME.exe bez paramaters otrzymuję na przykład:Jak przechwycić tekst wiersza polecenia, który nie jest wysyłany na standardowe wyjście?

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

usage: blah blah 
blah blah 

C:\LAME> 

jeśli staram przekierowanie wyjścia do pliku tekstowego przy użyciu> do pliku tekstowego plik tekstowy jest pusty. Skąd ten tekst można uzyskać, uruchamiając go przy użyciu System.Process w języku C#?

Odpowiedz

0

To prawdopodobnie używając stderr. cmd.exe nie pozwala na przekierowanie stderr, a jedynym sposobem, w jaki kiedykolwiek go przekierowałem, jest narzędzie djgpp.

+0

Czy mogę to zobaczyć w języku C# przy użyciu System.Process? Zajmę się tym teraz dzięki. – Dave

+0

Cóż, może się mylę, ten http://support.microsoft.com/kb/110930 mówi, że możesz teraz przekierować stderr. –

+0

to zawsze było możliwe przy użyciu cmd –

3

Może być wyprowadzany na stderr zamiast standardowe wyjście. Można redirect stderr wykonując:

LAME.exe 2> textfile.txt 

Jeśli ten pokazuje informacje, a następnie LAME jest wyprowadzanie do standardowego strumienia błędów. Jeśli napiszesz wrapper w C#, możesz przekierować standard error i strumienie wyjściowe z ProcessStartInfo.

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); 

pracował. Dziękuje wszystkim!

Powiązane problemy