2010-02-05 13 views
6

J'utilise l'encodeur mp3 de ligne de commande LAME dans un projet. Je veux être en mesure de voir quelle version utilise quelqu'un. si je viens exercerai lame.exe sans paramaters i get, par exemple:Comment capturer du texte en ligne de commande qui n'est pas envoyé à stdout?

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

usage: blah blah 
blah blah 

C:\LAME> 

si je tente de rediriger la sortie vers un fichier texte en utilisant> à un fichier texte le fichier texte est vide. Où est accessible ce texte lors de son exécution en utilisant System.Process dans C#?

Répondre

0

Il utilise probablement stderr. cmd.exe ne vous permet pas de rediriger stderr, et la seule façon de le rediriger est avec un outil djgpp.

+0

Puis-je voir cela dans C# using System.Process? Je vais regarder dans ceci maintenant merci. – Dave

+0

Eh bien peut-être que je me trompe, ce http://support.microsoft.com/kb/110930 dit que vous pouvez rediriger stderr maintenant. –

+0

cela a toujours été possible en utilisant cmd –

3

Il peut être édité sur stderr au lieu de stdout. Vous pouvez redirect stderr en faisant:

LAME.exe 2> textfile.txt 

Si cela vous montre des informations, puis LAME est délivrer en sortie le flux d'erreur standard. Si vous écrivez un wrapper en C#, vous pouvez rediriger le standard error et les flux de sortie de 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); 

travaillé. Merci a tous!