2012-11-08 3 views
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> 

(참고 : 저는 보안에 대한 실제 출력을 편집 한 이유)

처음 두 줄을 읽은 후 null이 반환되므로 스트림이 끝납니다. 내가 네 줄 전부를 얻을 수있는 방법이 있니?


업데이트 : 세 번째 빈 줄은 널 (null)으로 해석되고있다. 그러나 동일한 프로그램을 시도하면 Process p=Runtime.getRuntime().exec("cmd /c dir"); 새 줄이 있어도 콘솔과 똑같은 출력을 얻습니다.

+0

출력을 읽고 싶다고 생각했습니다. ** p.getOutputStream ** –

+0

아마도 중간의 빈 줄이 null로 해석됩니까? – mxns

+0

1) [exec 태그 Wiki] (http://stackoverflow.com/tags/runtime.exec/info)에서 링크 된 기사를 살펴보고 모든 제안을 구현하십시오. 즉각적인 문제를 해결할 수도 있지만 2) Point (1)과 3을 쉽게 구현할 수있는 ProcessBuilder를 사용하십시오. 3) 인수를 배열로 제공하십시오. E.G. ''nslookup '', '10.123.30.130''. –

답변

0

오류 버퍼도 읽습니다.

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

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

당신은 당신의 IP 주소에 대한 도메인을 확인할 수없는 오류 및 nslookup을이 있음을 볼 수 있습니다. IP 주소 대신 호스트 이름을 사용하십시오.