读取进程的输出

时间:2012-11-08 12:14:56

标签: java bufferedreader runtime.exec

我正在尝试使用BufferedReader来读取进程的输出。当我尝试

Process p=Runtime.getRuntime().exec("nslookup 10.123.30.130"); 
p.waitFor(); 
BufferedReader reader=new BufferedReader(new InputStreamReader(p.getInputStream())); 
String line=reader.readLine(); 
while(line!=null) 
{ 
    System.out.println(line); 
    line=reader.readLine(); 
}

输出

Server:  <edited server details>
Address:  <edited address details>

而控制台中进程的实际输出是:

Server:  <details edited>
Address:  <details edited>

Name:    <details edited>
Address:  <details edited>

(注意:出于安全原因,我已经编辑了实际输出)

我的观察是,在读取前两行后,返回null,因此流结束。有什么方法可以得到完整的四行吗?


更新: 第三个空行被解释为null。但是,如果我为Process p=Runtime.getRuntime().exec("cmd /c dir");尝试相同的程序,即使有新的行,我也会得到与控制台完全相同的输出。

1 个答案:

答案 0 :(得分:0)

也读取错误缓冲区。

BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream()));

String errorLine;
while( (errorLine = stdError.readLine()) != null ){
  System.out.println(errorLine);
}

您会发现存在错误, nslookup 无法解析您的IP地址域。使用主机名而不是IP地址。