2017-09-25 6 views
-1

J'écris un programme Java pour capturer la sortie d'une commande de terminal. Dans des conditions « normales », à savoir où j'exécuter la commande directement dans le terminal moi-même, je peux voir le résultat suivant:Java runtime getInputStream ignore la majorité de la sortie de la commande du terminal

enter image description here

Cependant, la sortie rendu par mon programme Java capture seulement un petit sous-ensemble de cette , voir ici:

enter image description here

C'est la base de code dont je parle:

import java.io.*; 

class evmTest { 

    public static void main(String[] args) { 
     String evmResult = ""; 

     String evmCommand = "evm --debug --code 7f00000000000000000000000000000000000000000000000000000000000000027f00000000000000000000000000000000000000000000000000000000000000027f00000000000000000000000000000000000000000000000000000000000000020101 run"; 
     try { 
      Runtime r = Runtime.getRuntime(); 
      Process p = r.exec(evmCommand); 

      BufferedReader in = new BufferedReader(new 
      InputStreamReader(p.getInputStream())); 
      String inputLine; 
      while ((inputLine = in.readLine()) != null) { 
       System.out.println(inputLine); 
       evmResult += inputLine; 
      } 
      in.close(); 

     } catch (IOException e) { 
      System.out.println(e); 
     } 

    } 
} 

Jusqu'à présent, je n'ai pas été en mesure de déterminer pourquoi ce code est seulement capable d'émettre le dérisoire 0x. J'ai posté cette question dans l'espoir que quelqu'un puisse m'aider à trouver la cause de cette erreur.

Répondre

-1

le faire comme ceci:

import java.io.*; 

class evmTest { 

public static void main(String[] args) { 
    String evmResult = ""; 

    String evmCommand = "evm --debug --code 7f00000000000000000000000000000000000000000000000000000000000000027f00000000000000000000000000000000000000000000000000000000000000027f00000000000000000000000000000000000000000000000000000000000000020101 run"; 
    try { 

     Runtime rt = Runtime.getRuntime(); 
     String command = "evm --debug --code 7f00000000000000000000000000000000000000000000000000000000000000027f00000000000000000000000000000000000000000000000000000000000000027f00000000000000000000000000000000000000000000000000000000000000020101 run"; 
     Process proc = rt.exec(command); 

     BufferedReader stdInput = new BufferedReader(new 
      InputStreamReader(proc.getInputStream())); 

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

     // read the output from the command 
     System.out.println("Here is the standard output of the command:\n"); 
     String s = null; 
     while ((s = stdInput.readLine()) != null) { 
      System.out.println(s); 
     } 

     // read any errors from the attempted command 
     System.out.println("Here is the standard error of the command (if any):\n"); 
     while ((s = stdError.readLine()) != null) { 
      System.out.println(s); 
     } 

    } catch (IOException e) { 
     System.out.println(e); 
    } 

} 

} 
+0

Vous devez lire ces flux dans des threads séparés, ou les fusionner. – EJP