1

我正在尝试使用 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>

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

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


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

4

1 回答 1

0

也读取错误缓冲区。

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

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

您会看到有一个错误,并且nslookup无法为您的 IP 地址解析域。使用主机名而不是 IP 地址。

于 2016-01-28T15:29:48.200 回答