使用Java获取terminal命令的输出

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

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

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

但这并没有给我一个当前命令输出的实时馈送。 我怎么能这样做,以便我可以每100毫秒执行一次System.out.println() ,例如,查看该进程的最新输出是什么。

你需要从进程中读取InputStream ,这是一个例子:

编辑我修改了这里建议的代码,以接收带有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终止消息