我有一个应用程序在命令窗口中调用另一个进程,该进程已更新输出到控制台窗口的统计信息 . 我认为这是一个相当简单的操作,但我似乎无法让它工作 . 我错过了什么吗?
string assemblyLocation = Assembly.GetExecutingAssembly().Location;
Process process = new Process
{
ProcessStart =
{
RedirectStandardOutput = true,
UseShellExecute = false,
WindowStyle = ProcessWindowStyle.Hidden,
Arguments = arg,
FileName = assemblyLocation.Substring(0, assemblyLocation.LastIndexOf("\\")) + "\\ffmpeg.exe",
CreateNoWindow = true
}
};
process.Start();
Console.WriteLine(process.StandardOutput.ReadToEnd());
process.WaitForExit();
理想情况下,我想要的是输出在我触及的过程中发生变化,或者数据进入读者,我从中得到了事件 .
任何帮助都会很棒,我觉得这是一个新手问题,但似乎缺少一些东西 .
6 回答
我以前经历过这个 . 有时,您调用输出到控制台的进程的方式与此类输出重定向不兼容 . 在这种情况下,我很幸运能够修改外部进程来解决这个问题 .
您可以尝试在另一个输出到控制台的进程上运行代码,看看它是否正常工作 . 它现在读到我的权利 .
编辑:
我去了一个代码块,我曾经这样做过 . 这是在WPF应用程序中,它将进程输出重定向到窗口 . 注意事件绑定 . 由于这是WPF,我必须调用我的调用来写出数据 . 由于您不担心阻塞,因此您应该只需将其替换为:
希望它有所帮助!
我正在运行,但如果你生成了're looking to act on output as soon as it',请尝试挂钩进程的
OutputDataReceived
事件 . 您可以指定处理程序以从进程异步接收输出 . 我成功地使用了这种方法 ...
有关详细信息,请参阅关闭进程OutputDataReceived事件 .
使用lambda表达式等:
有趣的是,您无法同时读取标准输出和标准错误:
http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.redirectstandardoutput(v=vs.71).aspx
流动的代码在VS2010中工作
检查您期望的输出是否未发送到StandardError输出而不是StandardOutput输出