使用Java获取终端命令的输出

使用Java获取终端命令的输出,java,terminal,runtime,Java,Terminal,Runtime,对于某些终端命令,它们会重复输出。例如,对于正在生成文件的内容,它可能会输出完成的百分比 我知道如何使用Java调用终端命令 Process p = Runtime.getRuntim().exec("command goes here"); 但这并没有给我命令当前输出的实时反馈。例如,如何才能每隔100毫秒执行一次System.out.println(),以查看进程的最新输出。您需要从进程中读取InputStream,以下是一个示例: 编辑我将代码修改为使用stdInput ProcessB

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

我知道如何使用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

终止消息。当然,它允许访问STDOUT和STDERR。谢谢你。那么,您能举例说明如何使用它每隔100毫秒左右获取一次输出吗?请参阅使用Runtime.exec()的任何人的必读。我尝试过这个,但它似乎在in.readLine()处冻结(它不输出任何内容,但不结束while循环)可能您正在运行的命令没有输出任何\r或\n字符(这会向缓冲区指示其已读取完整的线路)?可能它不会在特定终端模式下生成任何输出(尝试将结果管道化为“更多”,并查看其输出内容)?可能该命令将其输出写入stderr而不是stdout?它将冻结等待输入,因此您的进程不会使用
换行符终止数据,或者不会在all@dnault请参阅我在这里发布的代码,了解我尝试的Java代码的详细信息:@codegay Try exec'ing mencoder directly.Al因此,将命令指定为字符串[],而不是单个字符串(如果任何参数包含空格)。