0

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

我使用的方法是:

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

然后使用 anInputStreamReader来获取输出,主要使用此处的示例。我遇到的问题是流读取器仅在 PHP 脚本退出后才输出数据(考虑到输出是如何循环的,这很有意义)。

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

4

2 回答 2

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();
于 2012-09-13T10:36:33.790 回答
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();

不过,这仍然不是我想要的,所以现在我没有回答这个问题。

于 2012-09-14T09:21:10.940 回答