我必须写下一些运行外部进程的java代码。 此过程从 stdin 获取输入行,并在 stdout 上给出输出行。
我写的代码如下
try
{
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec("./" + args[0]);
Process proc2 = rt.exec(c);
int exitVal = proc2.exitValue();
System.out.println("Process exitValue: " + exitVal);
}
catch (Throwable t){
}
其中 args[0] 是外部进程,c 是我需要提供给进程的输入(字符串)。如果运行正确,我会得到 exitVal=0,但什么也得不到。另外,我真正想要打印的是外部进程的输出(在给定的示例中为“6”)。
最佳答案
您必须在进程上使用 getInputStream()
和 getOutputStream()
来进行通信,请参阅 javadocs .
如果不从进程中读取所有数据,它可能会挂起甚至死锁。常见问题的简要介绍,请参见this blog post 。至少,您应该从进程输出中读取所有数据。
关于Java运行bash命令,同时为其提供输入并获取输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9907789/