以下是我编写的程序,用于在linux中启动进程并在控制台中打印结果。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
public class Driver {
public static void main(String[] args) {
try {
Process process = new ProcessBuilder("/usr/bin/R").start();
InputStream is = process.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
我期待在终端中启动R时将显示的R版本和其他内容将在控制台中打印。但没有任何印刷品,也没有例外。
这里有什么问题?
修改
当我使用像" ls"这样的命令时,上面的程序有效。或" ps"。但不适用于任何不由自己退出的命令
答案 0 :(得分:2)
当进程在一个单独的线程中启动时,br
在执行到达循环时可能只有错误的状态。
原始解决方案:如果您不需要与已启动的流程进行交互,则可以在循环之前添加process.waitFor()
以确保流程已完成且输出可用。
通常,与外部进程的交互将需要单独的线程来监视其状态,读取std out和std err流。在这种情况下,使用库解决方案是有意义的,例如, Apache Commons Exec(见the tutorial)