2010-02-05 9 views
6

Sto usando il codificatore mp3 della riga di comando LAME in un progetto. Voglio essere in grado di vedere quale versione sta usando qualcuno. se ho appena eseguo lame.exe senza paramaters ho, ad esempio:Come si acquisisce il testo della riga di comando che non viene inviato allo stdout?

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

usage: blah blah 
blah blah 

C:\LAME> 

Se provo reindirizzare l'output in un file di testo utilizzando> per un file di testo il file di testo è vuoto. Dove è possibile accedere a questo testo durante l'esecuzione utilizzando System.Process in C#?

risposta

0

Probabilmente usando stderr. cmd.exe non ti permette di reindirizzare stderr, e l'unico modo in cui l'ho reindirizzato è con uno strumento djgpp.

+0

posso vederlo in C# utilizzando System.Process? Vedrò questo ora grazie. – Dave

+0

Beh, forse ho torto, questo http://support.microsoft.com/kb/110930 dice che è possibile reindirizzare ora lo stderr. –

+0

che è sempre stato possibile usando cmd –

3

Può essere emesso su stderr anziché su stdout. È possibile redirect stderr facendo:

LAME.exe 2> textfile.txt 

Se questo vi sono riportate le informazioni, quindi LAME è l'output nel flusso di errore standard. Se scrivi un wrapper in C#, puoi reindirizzare lo standard error e generare flussi da 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); 

lavorato. ringrazia tutti!

Problemi correlati