对于某些终端命令,它们会重复输出。例如,对于生成文件的内容,它可以输出完成的百分比。
我知道如何使用
在Java中调用终端命令Process p = Runtime.getRuntim().exec("command goes here");
但是这并没有给我一个当前命令输出的实时馈送。我怎么能这样做,以便我可以每隔100毫秒做一次System.out.println()
,例如,看看过程的最新输出是什么。
答案 0 :(得分:5)
您需要从流程中阅读InputStream
,这是一个示例:
修改我将代码修改为suggested here,以便通过errStream
stdInput
ProcessBuilder builder = new ProcessBuilder("command goes here");
builder.redirectErrorStream(true);
Process process = builder.start();
InputStream is = process.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
String line = null;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
出于调试目的,您可以将输入读取为字节而不是使用readLine
,以防进程未终止newLine