【发布时间】:2012-12-30 21:19:55
【问题描述】:
我正在开发一个应用程序,它调用多个命令行应用程序对某些视频文件进行一些后期处理。
现在我正在尝试使用Comskip 来识别来自我的有线卡调谐器的视频录制中的广告插播。这运行得很好,但是我在获取所需的屏幕输出时遇到了问题。
String stdout = null;
using (var process = new Process())
{
var start = new ProcessStartInfo(comskip, cmdLine);
start.WindowStyle = ProcessWindowStyle.Normal;
start.CreateNoWindow = true;
start.UseShellExecute = false;
start.RedirectStandardOutput = true;
process.StartInfo = start;
process.Start();
process.WaitForExit();
stdout = process.StandardOutput.ReadToEnd();
}
我期待stdout 抓取屏幕上显示的内容,就像手动启动应用程序时一样(下面的屏幕截图),这是应用程序正在执行的操作的连续馈送,并混合在输出中给出百分比进度的行,我想用它来更新进度条
但是运行上面的代码只会给我:
使用的命令行是: "C:\Users\Chris\Google Drive\Tools\ComSkip\comskip.exe" "C:\Users\Chris\Desktop\ComSkip Tuning Files\Modern Family.wtv" "--ini=C:\Users\Chris\ Desktop\ComSkip Tuning Files\comskip_ModernFamily.ini"
根据命令行将 ini 文件设置为 C:\Users\Chris\Desktop\ComSkip Tuning Files\comskip_ModernFamily.ini 使用 C:\Users\Chris\Desktop\ComSkip Tuning Files\comskip_ModernFamily.ini 作为初始值。
我还尝试重定向StandardError 流并获取process.StandardError.ReadToEnd();,但如果我使用这些选项运行,该过程似乎会挂起。
我是否遗漏了一些东西来捕捉我想要的东西,或者这个应用程序的输出流是否有可能转到其他无法访问的地方?
【问题讨论】:
-
process.WaitForExit()在进程完成之前不会返回,所以如果你想同步处理这一切,你需要一个while (!_process.HastExited) _process.StandardOutput.ReadLine();一次读取一行。
标签: c# command-line