In anderen Sprachen (wie Bash und Python), wenn wir einen untergeordneten Prozess spawnen, erbt dieser neue Prozess die Stdout und Stderr von der übergeordneten. Dies bedeutet, dass alle Ausgaben des untergeordneten Prozesses an das Terminal sowie die Ausgabe des übergeordneten Prozesses gedruckt werden.Wie Umleitung Child-Prozess stdout/stderr auf den Hauptprozess stdout/stderr in Java?
Wie können wir das gleiche Verhalten in Java erreichen?
Mein erster Versuch war:
proc = Runtime.getRuntime().exec(cmd);
Aber es wird nicht funktionieren. Basierend auf this answer und this answer, habe ich den Code mit Fassung:
ProcessBuilder pb = new ProcessBuilder(cmd);
pb.redirectOutput(System.out);
pb.redirectError(System.err);
Aber nicht einmal kompilieren, da die Argumente mit dem erwarteten Methodenparameter nicht kompatibel sind.
Sie meinen, ich muss eine Schleife implementieren, die nur aus einem Stream liest und in einem anderen schreibt? Entschuldigung, nicht machbar. Zu viel Arbeit (erfordert wahrscheinlich, in einem neuen Thread zu laufen, und es bringt viele Punkte möglicher Fehler ein). –
Machbar oder nicht, was früher benötigt wurde. Ich habe gerade die Java 7 API überprüft und es sieht so aus, als ob es adressiert wurde - Sie können jetzt redirectOutput in Redirect.INHERIT übergeben, das aussieht, um zu erreichen, was Sie wollen. – henry