【发布时间】:2013-06-03 20:27:37
【问题描述】:
我想启动一个进程并读取标准输出,但还要让这个读取输出显示在生成进程的控制台窗口中。当前使用process.StartInfo.RedirectStandardOutput = true; 结合BeginOutputReadLine() 会导致输出不显示在控制台窗口中。这是不可取的。有谁知道如何做到这一点,或者是否有可能?
为 cmets 澄清。
我有一个响应进程输出的函数,我设置了该函数:
ProcessHandle.OutputDataReceived += new DataReceivedEventHandler(ProcessHandle_OutputDataReceived);
void ProcessHandle_OutputDataReceived(object sender, DataReceivedEventArgs e)
{
... //React to output here.
}
但是这样做时输出不会进入生成进程的控制台窗口,有没有办法手动将其反馈到该控制台,以便它显示为好像我的应用程序没有拦截它?
【问题讨论】:
-
所以您希望它同时出现在标准窗口和应用程序的标准输出中?
-
你不能同时拥有它,只是没有选择。
-
在 Linux 中有一个名为
tee的命令,您也许可以在 Windows 上找到类似的东西,但我不能 100% 确定这样的东西是否适用于 Windows。它可以让您将 stdout 复制到 stderr,并捕获 stdout 以在应用程序中显示,并允许 stderr 仍然输出到其他进程的控制台窗口。 -
是的,Console.Write 或 Console.WriteLine 应该做你想做的事。
-
Err... 如果我使用 Console.Write 它将显示在我的应用程序控制台中,而不是在生成的应用程序控制台中。 tee 和我想要的很相似,我会从那里环顾四周。