InputStream kann nicht von Java Process (Runtime.getRuntime (). Exec () oder ProcessBuilder) gelesen werden.

Ich versuche, einen Prozess extern mit Java zu starten und kann nichts von seinem InputStream lesen.

Wenn ich einen Prozess mit Befehlen wie "ls", "ps" oder "kill" starte, funktioniert alles einwandfrei. Ich kann den Prozess starten und Informationen entweder über den InputStream oder den ErrorStream des Prozesses abrufen.

Wenn ich versuche, einen Befehl wie "ftp" oder "telnet" zu verwenden, blockieren sowohl InputStream als auch ErrorStream mein Programm, wenn ich versuche zu lesen. Es werden zu keinem Zeitpunkt Informationen über diese Streams übertragen.

Kann jemand das Verhalten erklären? Ist das mit diesen Befehlen nicht möglich oder habe ich ein Problem mit meiner Implementierung?

     String processName = _configuration.getProgramCommand().getCommand();
   ProcessBuilder procBuilder = new ProcessBuilder(processName);   

   System.out.println("Starting process "+processName);   
   _proc = Runtime.getRuntime().exec(processName);// procBuilder.start();            

   if(!procBuilder.redirectErrorStream()) {    
    _errorWorker = new ProcessErrorWorker(_proc);
    _errorWorker.start();   
   }

   String proc_start_answer = _configuration.getNextCommand().getCommand();
   System.out.println("Waiting for process answer '"+proc_start_answer+"'");
   BufferedReader input = new BufferedReader(new InputStreamReader(_proc.getInputStream()));      

   String answer = "";  

   try {         
    System.out.println("inputstream ready: "+input.ready());
    answer+=input.readLine(); 
    System.out.println("process answer:  "+answer);
    input.close();        

   } catch(Exception e) {
    System.out.print(e.getMessage());     
   } 

Antworten auf die Frage(12)

Ihre Antwort auf die Frage