在 .NET 中捕获进程输出
在 .NET 中启动一个控制台应用程序子进程并捕获其输出,可以使用以下方法:
<code class="language-csharp">string retMessage = string.Empty; ProcessStartInfo startInfo = new ProcessStartInfo(); Process p = new Process(); startInfo.CreateNoWindow = true; startInfo.RedirectStandardOutput = true; startInfo.RedirectStandardInput = true; startInfo.UseShellExecute = false; startInfo.Arguments = command; startInfo.FileName = exec; p.StartInfo = startInfo; p.Start(); p.OutputDataReceived += (sender, args) => retMessage += args.Data; // 开始异步输出读取。 p.BeginOutputReadLine(); p.WaitForExit(); return retMessage;</code>
此方法使用 OutputDataReceived
事件处理程序将接收到的输出追加到字符串 (retMessage) 中。我们调用 BeginOutputReadLine()
来启动输出的异步读取。默认情况下,WaitForExit()
会阻塞直到子进程退出,从而允许完全捕获输出。
另一种直接读取输出的方法是:
<code class="language-csharp">return p.StandardOutput.ReadToEnd();</code>
这种更简单的方法在许多情况下都足够了,但需要注意的是,它一次性读取所有输出,如果输出很大,可能会阻塞执行线程。使用事件处理程序方法可以提供异步输出捕获。
以上是如何在.NET中有效捕获控制台应用程序输出?的详细内容。更多信息请关注PHP中文网其他相关文章!