0

設定された間隔で PHP スクリプトを呼び出すために使用される Java プログラムを作成しています。PHP スクリプトは大量のデータを出力するため、スクリプトの実行中に Java プログラムがすべての PHP スクリプトの出力を表示することがクライアントの要件です。

私が使用している方法は次のとおりです。

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

次に を使用して、主にhereInputStreamReaderの例を使用して出力を取得します。私が抱えている問題は、ストリーム リーダーが 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 に答える