微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何捕获未发送到标准输出的命令行文本?

我正在项目中使用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>

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

如何将窗口句柄传递给subprocess?

PHP:术语“PHP”不被识别为cmdlet,函数,脚本文件或可操作程序的名称

SysLink焦点矩形

不可resize的窗口边框和位置

与本地存储库在Windows上使用capistrano部署会引发错误

这可能是使用stderr。 cmd.exe不允许你重定向stderr,唯一的办法就是用djgpp工具重定向它。

它可以输出到stderr而不是stdout。 您可以通过执行以下操作重定向stderr :

LAME.exe 2> textfile.txt

如果这显示你的信息,那么LAME输出到标准的错误流。 如果您使用C#编写包装器,则可以从processstartinfo重定向标准错误输出流。

System.Diagnostics.Process proc = new System.Diagnostics.Process(); proc.EnableRaisingEvents = false; proc.StartInfo.FileName = @"C:LAMELAME.exe"; proc.StartInfo.RedirectStandardError = true; proc.StartInfo.UseShellExecute = false; proc.Start(); string output = proc.StandardError.ReadToEnd(); proc.WaitForExit(); MessageBox.Show(output);

工作。 感谢所有!

它可能被发送到stderr,你有没有尝试过?

检查Process.StandardError 。

试用一下

C:LAME>LAME.exe 2> test.txt

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐