Java 读取进程的输出

Java 读取进程的输出,java,bufferedreader,runtime.exec,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) {

我试图使用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。但是如果我为
processp=Runtime.getRuntime().exec(“cmd/cdir”)尝试相同的程序我得到的输出与控制台中的输出完全相同,即使有新行。

读取错误缓冲区

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

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

您将看到出现错误,nslookup无法解析您IP地址的域。使用主机名而不是IP地址

我以为你想读输出!P.GETOutPutsFrase:也许中间的空行被解释为NULL?1)通过链接并实现所有建议。这可能会解决眼前的问题,但也。。2) 使用
ProcessBuilder
,使第(1)点和。。3) 以数组形式提供参数。例如,
“nslookup”,“10.123.30.130”
。不要忘记读取错误流:
p.getErrorStream()