我从.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;
}
}
答案 0 :(得分:14)
更好的方法是创建一个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();
答案 1 :(得分:6)
您需要将RedirectStandardOutput设置为true,然后获取结果的最简单方法是使用事件驱动机制:
Process p = Process.Start(psi);
p.BeginOutputReadLine(LineHandler);
p.EnableRaisingEvents = true;
其中LineHandler
是收集每行输出的适当方法,例如进入StringWriter
。
答案 2 :(得分:1)
设置
ProcessStartInfo.RedirectStandardOutput
和.RedirectStandardError
。
然后,您可以阅读StandardOutput
返回的Process对象上的StandardError
和Process.Start
- 流。
MSDN为您提供了一个简单的样本。