In anderen Sprachen (wie bash und Python ) erbt dieser neue Prozess, wenn wir einen untergeordneten Prozess generieren, die stdout und stderr vom übergeordneten Element. Dies bedeutet, dass alle Ausgaben des untergeordneten Prozesses an das Terminal sowie die Ausgabe des übergeordneten Elements gedruckt werden.
Wie können wir dasselbe Verhalten in Java erreichen?
Mein erster Versuch war:
%Vor%Aber es wird nicht funktionieren. Basiert auf dieser Antwort und dies Antwort , ich habe den Code durch:
ersetzt %Vor%Aber das kompiliert nicht, da die Argumente nicht mit den erwarteten Methodenparametern kompatibel sind.
Sie müssen die Ausgabe- und Fehlerströme des von Ihnen erstellten Prozesses lesen und die Ausgabe an die Stelle schreiben, an die sie gehen soll (in Ihrem Fall System.out und System.err).
Bearbeiten. Die obige Antwort ist korrekt für Java & lt; 7. Ab 7 aus dem Javadoc scheint es möglich zu sein, stattdessen
aufzurufen %Vor%Das ist nicht so schlimm. Ich sagte zunächst "einfach", dann wurde mir klar, dass ich den InputStreamConsumer programmieren musste:
%Vor%.... läuft in etwas wie ...
%Vor%Es ist sicherlich möglich. Die Ant-Java-Aufgabe tut dies, wenn fork auf true gesetzt ist. Ich erinnere mich nicht an alle Details, aber bei einem kurzen Blick scheint es, dass der Großteil der Magie in PumpStreamHandler . Sie könnten versuchen, etwas Inspiration daraus zu finden.