7

对于某些终端命令,它们会重复输出。例如,对于正在生成文件的内容,它可能会输出完成的百分比。

我知道如何使用 Java 调用终端命令

Process p = Runtime.getRuntim().exec("command goes here");

但这并不能让我实时了解命令的当前输出。我怎样才能做到这一点,以便我可以System.out.println()每 100 毫秒执行一次,例如,查看进程的最新输出是什么。

4

1 回答 1

9

您需要InputStream从流程中读取,这是一个示例:

编辑我修改了这里建议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

于 2013-02-16T21:32:37.647 回答