2012-11-08 3 views
1

J'essaie d'utiliser BufferedReader pour lire la sortie d'un processus. Lorsque je tenteLecture de la sortie d'un processus

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(); 
} 

la sortie est

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

alors que la production réelle du processus dans la console est:

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

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

(Note: J'ai modifié la sortie réelle pour la sécurité Mon argument est qu'après avoir lu les 2 premières lignes, null est retourné et par conséquent le flux se termine. Y a-t-il un moyen d'obtenir les quatre lignes complètes?


Update: La troisième ligne vide est interprétée comme une valeur nulle. Mais si j'essaye le même programme pour Process p=Runtime.getRuntime().exec("cmd /c dir"); j'obtiens la sortie exactement comme dans la console même s'il y a de nouvelles lignes.

+0

Je pensais que vous voulez lire la sortie! ** p.getOutputStream ** –

+0

peut-être que la ligne vide au milieu est interprétée comme nulle? – mxns

+0

1) Parcourez l'article lié depuis le [wiki de la balise exec] (http://stackoverflow.com/tags/runtime.exec/info) et mettez en œuvre toutes les suggestions. Cela pourrait conduire à une solution au problème immédiat, mais aussi .. 2) Utiliser un 'ProcessBuilder' qui facilite la mise en œuvre du point (1) et .. 3) Fournir des arguments en tant que tableau. PAR EXEMPLE. '" nslookup "," 10.123.30.130 "'. –

Répondre

0

Lire également le tampon d'erreur.

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

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

Vous verrez qu'il ya une erreur et nslookup ne peut pas résoudre le domaine de votre adresse IP. Utilisez le nom d'hôte au lieu de l'adresse IP.

Questions connexes