我想将Process的标准输出重定向到字符串以便以后解析。 我还希望在进程运行时看到屏幕上的输出,而不仅仅是当它完成运行时。
这甚至可能吗?
答案 0 :(得分:16)
来自MSDN的示例:
// Start the child process.
Process p = new Process();
// Redirect the output stream of the child process.
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.FileName = "Write500Lines.exe";
p.Start();
// Do not wait for the child process to exit before
// reading to the end of its redirected stream.
// p.WaitForExit();
// Read the output stream first and then wait.
string output = p.StandardOutput.ReadToEnd();
p.WaitForExit();
另请参阅OutputDataReceived
和BeginOutputReadLine()
以获取ReadToEnd()
的替代方案,以便更好地满足您的“在流程运行时查看输出”要求。
答案 1 :(得分:1)
如果你想从你的c#应用程序执行一个exe并从中获取输出,那么你可以使用下面的代码
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.FileName = "PATH TO YOUR FILE";
p.StartInfo.UseShellExecute = false;
p.StartInfo.Arguments = metalType + " " + graphHeight + " " + graphWidth;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
p.EnableRaisingEvents = true;
p.Start();
svgText = p.StandardOutput.ReadToEnd();
using(StreamReader s = p.StandardError)
{
string error = s.ReadToEnd();
p.WaitForExit(20000);
}
不要伪造写p.EnableRaisingEvents = true;