Ich versuche, Befehle auf dem Terminal auszuführen. mitLesen von BufferedReader
ProcessBuilder builder = new ProcessBuilder("/bin/bash");
builder.redirectErrorStream(true);
Process process = builder.start();
OutputStream stdin = process.getOutputStream();
InputStream stdout = process.getInputStream();
reader = new BufferedReader(new InputStreamReader(stdout));
writer = new BufferedWriter(new OutputStreamWriter(stdin));
Ich werde diesen Leser und und Schriftsteller verwenden, um ständig mit dem Prozess zu kommunizieren.
ich die folgende Schleife
while ((line = reader.readLine()) != null) {
System.out.println("line);
}
AUSGABE zu lesen: Das Problem hier ist, dass, wenn der Leser beginnt aus dem Puffer liest seinen für immer in der while-Schleife. Es wird nie beendet.
Ich habe versucht, das Lesen in einem Thread habe ich
public void run() {
try {
String line;
outputText = "";
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException ex) {
Logger.getLogger(ThreadReader.class.getName()).log(Level.SEVERE, null, ex);
}
}
Aber jetzt, wenn der Leser beginnt keine Kontrolle zu bringen und beendet hat.
ZIEL: Ich muss einen Befehl ausführen und lesen Sie die Ausgabe und dann den nächsten Befehl.
Warum haben Sie keine Kontrolle darüber, wann der Leser startet? Das ist, wenn Sie den Thread richtig starten? (Oder plane es vorzugsweise in einem Thread-Pool). Und Ihr Leser stoppt, wenn der Prozess seine Ausgabe-/Fehlerströme beendet oder schließt. Wenn der Prozess das nicht macht, hört der Leser nicht auf. –
Versuchen Sie, ein Ende des Stream-Tokens zu verwenden, um dem Leser mitzuteilen, wann er fertig sein muss (oder eine Pause machen muss). Andernfalls würde es unbegrenzt auf eine neue Eingabe warten, da es nicht weiß, dass der andere Prozess in den Stream geschrieben wird. – Thomas
"Ich muss einen Befehl ausführen und den Ausgang lesen ..." Erklären Sie, was "den Ausgang lesen" eigentlich bedeutet. Lesen Sie eine Zeile der Ausgabe? Fünf Zeilen lesen? Lesen Sie alle verbleibenden Ausgaben? – VGR