Ich möchte einen Prozess für einige Zeit ausführen und dann die Ausgabe abrufen und den Prozess zu zerstören. Dies ist mein CodeHolen Sie das Ausgabeergebnis eines Prozesses mit Java
BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));
BufferedReader temp;
p.waitFor(7, TimeUnit.SECONDS);
temp=stdInput;
p.destroy();
System.out.println(temp.readLine());
aber ich als Ergebnis erhalten
java.io.IOException: Stream closed
Wie kann ich das Ergebnis nach Ausführung des Prozesses 7 Sekunden kopieren? Wenn ich diesen Code verwenden
p.waitFor(7, TimeUnit.SECONDS);
while ((inputRead=stdInput.readLine()) != null){
Helper.log(inputRead);
}
die while-Schleife endet nie, weil der Prozess noch am Leben nach dem waitFor
ist, also muss ich es zerstören. Und wenn ich den Prozess zerstöre, kann ich den Inhalt von stdInput
nicht mehr bekommen.
readLine() ist nicht genug? Sie denken, dass ready() möglicherweise false zurückgibt, wenn readLine() true zurückgibt? – davidxxx
Die while-Schleife wird niemals beendet, da immer etwas im Puffer zu lesen ist, bis der Prozess stoppt – sonia
'p.waitFor (7, TimeUnit.SECONDS);' blockiert den Thread für '7' Sekunden oder bis der Prozess endet Dieser Aufruf muss nicht durch 'Thread.sleep (7000);' ersetzt werden. – Titus