打印Runtime.getRuntime()。exec()输出直播

时间:2012-09-13 10:30:08

标签: java runtime.exec outputstream

我正在编写一个Java程序,用于在设置的时间间隔内调用PHP脚本。 PHP脚本输出大量数据,并且客户端要求Java程序在脚本运行时显示所有PHP脚本的输出。

我正在使用的方法是:

Runtime.getRuntime().exec(new String[]{"php", "file.php"});

然后使用InputStreamReader来获取输出,主要使用here中的示例。我遇到的问题是,当PHP脚本退出时,流阅读器只输出数据(考虑到输出如何循环,这是有意义的。)

如何在脚本运行时实时打印脚本的输出?

2 个答案:

答案 0 :(得分:5)

我是通过从单独的线程中读取输出来完成的:

  Process p = Runtime.getRuntime().exec(commands);
  final InputStream stream = p.getInputStream();
  new Thread(new Runnable() {
    public void run() {
      BufferedReader reader = null;
      try {
        reader = new BufferedReader(new InputStreamReader(stream));
        String line = null;
        while ((line = reader.readLine()) != null) {
          System.out.println(line);
        }
      } catch (Exception e) {
        // TODO
      } finally {
        if (reader != null) {
          try {
            reader.close();
          } catch (IOException e) {
            // ignore
          }
        }
      }
    }
  }).start();

答案 1 :(得分:0)

现在我决定选择Andrew Thompson的建议:

ProcessBuilder builder = new ProcessBuilder(command);
builder.redirectErrorStream(true);
Process process = builder.start();

InputStreamReader istream = new  InputStreamReader(process.getInputStream());
BufferedReader br = new BufferedReader(istream);

String line;
while ((line = br.readLine()) != null){
   System.out.println(line);
}

process.waitFor();

尽管如此,这仍然不是我想要的,所以现在我还没有回答这个问题。