【发布时间】:2013-06-28 17:46:52
【问题描述】:
我正在使用Process.Start 运行命令行实用程序。出于调试目的,我希望将其输出流发送到 Visual Studio 的调试输出面板 (Debug.Write)。我想实时执行此操作,而不是等待该过程完成然后一次全部写入。
我知道这在理论上是可能的,但我对 Stream 对象的经验不足,不知道如何做到这一点。
【问题讨论】:
我正在使用Process.Start 运行命令行实用程序。出于调试目的,我希望将其输出流发送到 Visual Studio 的调试输出面板 (Debug.Write)。我想实时执行此操作,而不是等待该过程完成然后一次全部写入。
我知道这在理论上是可能的,但我对 Stream 对象的经验不足,不知道如何做到这一点。
【问题讨论】:
这可能不是你想要的,但我认为它会让你走上正轨。
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.OutputDataReceived += p_OutputDataReceived;
p.Start();
p.BeginOutputReadLine();
然后,用于接收数据的事件处理程序。
void p_OutputDataReceived(object sender, DataReceivedEventArgs e)
{
Debug.Write(e.Data);
}
【讨论】:
p.StandardOuptut.ReadToEnd() 您必须创建一个StringBuilder 并在事件处理程序中自己构建它。很简单,只是需要注意一些事情。
CliWrap 使处理进程变得微不足道。以下是您的特定场景的外观:
// Pipe the output directly to Debug.WriteLine
var cmd = Cli.Wrap("app.exe") | Debug.WriteLine;
await cmd.ExecuteAsync();
【讨论】: