die redirectErrorStream Eigenschaft Auf Process stderr Ausgabe an stdout senden:
ProcessBuilder builder = new ProcessBuilder(command);
builder.redirectErrorStream(true);
Sie dann einen Thread befassen sich mit dem Prozessstrom, so etwas wie die folgenden erstellen sollten: Wo
Process p = builder.start();
InputHandler outHandler = new InputHandler(p.getInputStream());
InputHandler ist definiert als:
private static class InputHandler extends Thread {
private final InputStream is;
private final ByteArrayOutputStream os;
public InputHandler(InputStream input) {
this.is = input;
this.os = new ByteArrayOutputStream();
}
public void run() {
try {
int c;
while ((c = is.read()) != -1) {
os.write(c);
}
} catch (Throwable t) {
throw new IllegalStateException(t);
}
}
public String getOutput() {
try {
os.flush();
} catch (Throwable t) {
throw new IllegalStateException(t);
}
return os.toString();
}
}
Alternativ, jus t Erstelle zwei InputHandler für den InputStream und ErrorStream. Zu wissen, dass das Programm blockiert, wenn Sie sie nicht lesen, ist 90% des Kampfes :)
Ich würde das auch erwähnen ... aber es schien zu einfach. – jjnguy
Ich erwähnte das in der Frage; Ich suchte nach einer Antwort, die nicht Thread-basiert war. –