2010-02-05 81 views
6

我在项目中使用LAME命令行mp3编码器。我希望能够看到某人正在使用的版本。如果我只是没有PARAMATERS我得到的,例如执行LAME.exe:如何捕获未发送到标准输出的命令行文本?

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

usage: blah blah 
blah blah 

C:\LAME> 

如果我尝试将输出重定向到使用文本文件>到一个文本文件中的文本文件是空的。在c#中使用System.Process运行它时,可以从哪里获得此文本?

回答

0

它可能使用标准错误。 cmd.exe不允许你重定向stderr,并且我重定向它的唯一方法是使用djgpp工具。

+0

我可以看到,在C#使用System.Process?我现在要看看这个谢谢。 – Dave 2010-02-05 17:08:05

+0

嗯,也许我错了,这个http://support.microsoft.com/kb/110930说,你现在可以重定向stderr。 – 2010-02-05 17:10:22

+0

这总是可以使用cmd – 2010-02-05 17:13:24

3

它可能会输出到stderr而不是stdout。您可以redirect stderr做:

LAME.exe 2> textfile.txt 

如果这里显示的信息,然后LAME是输出到标准错误流。如果您使用C#编写包装器,则可以重定向standard error并输出来自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); 

工作。谢谢大家!

相关问题