对于某些终端命令,它们会重复输出。例如,对于正在生成文件的内容,它可能会输出完成的百分比。
我知道如何使用 Java 调用终端命令
Process p = Runtime.getRuntim().exec("command goes here");
但这并不能让我实时了解命令的当前输出。我怎样才能做到这一点,以便我可以System.out.println()
每 100 毫秒执行一次,例如,查看进程的最新输出是什么。
您需要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