Чтение вывода из процесса

Я пытаюсь использовать 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, и, следовательно, поток заканчивается. Есть ли способ получить все четыре строчки?


Обновление: третья пустая строка интерпретируется как пустая. Но если я попробую ту же программу для Process p=Runtime.getRuntime().exec("cmd /c dir");, я получу результат точно так же, как в консоли, даже если есть новые строки.


person codingsplash    schedule 08.11.2012    source источник
comment
Я думал, ты хочешь прочитать вывод! p.getOutputStream   -  person Bhavik Shah    schedule 08.11.2012
comment
возможно, пустая строка посередине интерпретируется как пустая?   -  person mxns    schedule 08.11.2012
comment
1) Просмотрите статью, указанную в вики-странице тега exec, и выполните все предложения. Это может привести к решению непосредственной проблемы, но также .. 2) Используйте ProcessBuilder, который упрощает реализацию пункта (1) и .. 3) Предоставляет аргументы в виде массива. НАПРИМЕР. "nslookup","10.123.30.130".   -  person Andrew Thompson    schedule 08.11.2012
comment
Не забудьте также прочитать поток ошибок: p.getErrorStream();   -  person alaster    schedule 08.11.2012


Ответы (1)


Также прочитайте буфер ошибок.

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

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

Вы увидите, что произошла ошибка, и nslookup не может определить домен для вашего IP-адреса. Используйте имя хоста вместо IP-адреса.

person Dmitry Ivanov    schedule 28.01.2016