我正在编写一个Java程序,用于在设置的时间间隔内调用PHP脚本。 PHP脚本输出大量数据,并且客户端要求Java程序在脚本运行时显示所有PHP脚本的输出。
我正在使用的方法是:
Runtime.getRuntime().exec(new String[]{"php", "file.php"});
然后使用InputStreamReader
来获取输出,主要使用here中的示例。我遇到的问题是,当PHP脚本退出时,流阅读器只输出数据(考虑到输出如何循环,这是有意义的。)
如何在脚本运行时实时打印脚本的输出?
答案 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();
尽管如此,这仍然不是我想要的,所以现在我还没有回答这个问题。