如何捕获未发送到stdout的命令行文本?

时间:2010-02-05 17:05:17

标签: c# windows cmd lame

我在项目中使用LAME命令行mp3编码器。我希望能够看到有人正在使用的版本。如果我只执行没有参数的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运行时,此文本可从何处访问

4 个答案:

答案 0 :(得分:3)

可以输出到stderr而不是stdout。你可以redirect stderr做:

LAME.exe 2> textfile.txt

如果显示信息,则LAME输出到标准错误流。如果您使用C#编写包装器,则可以重定向standard error并从ProcessStartInfo输出流。

答案 1 :(得分: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);

的工作。谢谢大家!

答案 2 :(得分:0)

它可能被发送到stderr,你试过吗?

查看Process.StandardError

使用

试一试
C:\LAME>LAME.exe 2> test.txt

答案 3 :(得分:0)

它可能正在使用stderr。 cmd.exe不允许您重定向stderr,而且我重定向它的唯一方法是使用djgpp工具。