如何将进程输出重定向到System.String

我从.NET应用程序调用Java进程,我需要将控制台输出重定向到System.String以便稍后进行解析。 请指教。 我会很感激短代码示例。

public bool RunJava(string fileName) { try { ProcessStartInfo psi = new ProcessStartInfo(); psi.CreateNoWindow = true; psi.UseShellExecute = false; psi.EnvironmentVariables.Add("VARIABLE1", "1"); psi.FileName = "JAVA.exe"; psi.Arguments = "-Xmx256m jar.name"; Process.Start(psi); return true; } catch (Exception ex) { return false; } } 

更好的方法是创建一个Process实例并使用如下流来捕获输出:

 Process cmd = new Process(); cmd.StartInfo.FileName = "JAVA.exe"; cmd.StartInfo.Arguments = "-Xmx256m jar.name"; cmd.StartInfo.UseShellExecute = false; cmd.StartInfo.CreateNoWindow = true; cmd.StartInfo.RedirectStandardOutput = true; cmd.StartInfo.EnvironmentVariables.Add("VARIABLE1", "1"); cmd.Start(); StreamReader sr = cmd.StandardOutput; string output = sr.ReadToEnd(); cmd.WaitForExit(); 

您需要将RedirectStandardOutput设置为true,然后获取结果的最简单方法是使用事件驱动机制:

 Process p = Process.Start(psi); p.BeginOutputReadLine(LineHandler); p.EnableRaisingEvents = true; 

其中LineHandler是收集每行输出的合适方法,例如收集到StringWriter


ProcessStartInfo.RedirectStandardOutput

.RedirectStandardError
然后,您可以读取Process.Start返回的Process对象上的StandardOutputStandardError -stream。

MSDN为您提供了一个简单的样本。