So leiten Sie den untergeordneten Prozess stdout / stderr in den Hauptprozess stdout / stderr in Java um?

8

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.

    
Denilson Sá Maia 10.05.2012, 19:08
quelle

3 Antworten

13

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%     
henry 10.05.2012, 19:18
quelle
3

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%     
user3473636 28.03.2014 17:15
quelle
1

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.

    
asudell 10.05.2012 19:19
quelle

Tags und Links