ProcessBuilder Output

TDO88

Bekanntes Mitglied
Hallo Zusammen,

folgendes Problem. Ich rufe aus meiner Java Anwendung ein anderes Programm ".exe" auf.
Das externe Programm führt kurz etwas aus und gibt über die Konsole einen String zurück, ob der Vorgang erfolgreich war oder nicht.
Jetzt möchte ich diesen String abfangen und aus meinem Programm heraus auswerten.
Dazu habe ich folgendes versucht:
Java:
ProcessBuilder pBuilder = new ProcessBuilder(SwitchBoardPath,LoadINICommand);
File output = new File("C:\\Users\\TDO\\Desktop\\output.txt");
pBuilder.redirectOutput(output);
Process p = pBuilder.start();

BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(p.getInputStream()));

p.waitFor();
                       
StringBuilder response = new StringBuilder();
String line;
while ((line = bufferedReader.readLine()) != null) {
           response.append(line + "\n");
}
bufferedReader.close();

Die Methode pBuilder.redirectOutput(output) funktioniert einwandfrei. Der String wird empfangen und in die Datei geschrieben.
Die Variable response bleibt leider leer.
Wenn der Text in dem Outputfile steht bringt mir das leider nichts. Wie komme ich direkt an den String, bzw. wo ist mein Fehler?

Gruß
TDO
 

Joose

Top Contributor
Du initialisierst deinen bufferedReader mit dem InputStream vom Process. Was glaubst du für was der Stream gedacht ist?
Was du nicht machst ist die Datei auslesen? Natürlich sollte es auch möglich sein direkt vom OutputStream des Process zu lesen :)
 

RalleYTN

Bekanntes Mitglied
Nutz doch redirectOutput() zum umleiten in einen ByteArrayOutputStream. Von dem kannst du die Bytes auslesen und auch zum schreiben verwenden. Wenn du die Bytes in einen String umwandeln willst musst du folgendes tun:
Java:
String outputString = new String(outputStream.toByteArray());
Ich habe keine Ahnung ob das funktioniert, aber ich hätte es so gemacht.
 

TDO88

Bekanntes Mitglied
Hallo,

zunächst vielen Dank für eure Posts.

Du initialisierst deinen bufferedReader mit dem InputStream vom Process. Was glaubst du für was der Stream gedacht ist?
Das tue ich, weil es z.B. hier oder hier genauso steht... Hatte mich zunächst auch gewundert, aber die Leute auf den beiden Seiten wollten ja wohl das gleiche wie ich und machen es mit dem InputStream.

Was du nicht machst ist die Datei auslesen?
Das ist richtig. Ist aber auch absicht! Ich will den Text eigentlich nicht in eine Datei schreiben. Das habe ich nur getestet, um zu sehen, ob meine Anwendung wirklich was schickt. Das ist bisher die einzige Variante, die ich probiert hab, die funktioniert hat.

Natürlich sollte es auch möglich sein direkt vom OutputStream des Process zu lesen :)

Eine Idee wie?

Nutz doch redirectOutput() zum umleiten in einen ByteArrayOutputStream. Von dem kannst du die Bytes auslesen und auch zum schreiben verwenden. Wenn du die Bytes in einen String umwandeln willst musst du folgendes tun:
Java:
String outputString = new String(outputStream.toByteArray());
Ich habe keine Ahnung ob das funktioniert, aber ich hätte es so gemacht.

Werde ich gleich mal testen und dann berichten!

Gruß
TDO
 

Joose

Top Contributor

TDO88

Bekanntes Mitglied
Ich schätze auch mal, dass ich eine Möglichkeit finden muss mit der pBuilder Variable den Output abzufangen und nicht mit der Process Variable "p". Aber für die pBuilder gibt es nur die Möglichkeiten redirectOutput() mit Redirect als Rückgabetyp, redirectOutput(File file) mit ProcessBuilder als Rückgabewert und redirectOutput(Redirect destination) ebenfalls mit ProcessBuilder als Rückgabewert.

Mein Fehler :)
Beim Process sind diese beiden Dinge umgedreht, daher hast du natürlich recht.
Ich habe noch diesen Link dazu gefunden, vielleicht hilft dir dieser weiter: http://stackoverflow.com/questions/8149828/read-the-output-from-java-exec

Die Seite hatte ich auch schon gesehen. Aber die while Schleife wird ständig sofort beendet, da das aufgerufene Programm nur am Ende einen String rausschickt und nicht die ganze Zeit Daten liefert.

Hat jemand noch eine Idee, wie ich den Redirect auf einen String vom ProcessBuilder nutzen kann?
 

TDO88

Bekanntes Mitglied
Übrigens: Das externe Programm ist eine C Anwendung, welche über cout den Befehl am Ende schickt, den ich benötige. Weiß nicht, ob das von Interesse ist
 

TDO88

Bekanntes Mitglied
Macht es einen Unterschied, wenn der String, der vom externen Prozess gesendet wird nicht mit z.B. "\r" abgeschlossen ist?
 

Joose

Top Contributor
Das kann schon ein Problem sein ... da du ja mit "nextLine" versuchst zu lesen, solange er aber keine vollständige Zeile hat wird er wahrscheinlich auch nichts lesen können
 

TDO88

Bekanntes Mitglied
Hab in der externen Anwendung jetzt einmal ein "\n" am Ende der Zeile eingefügt -> immernoch nichts zu lesen und nochmal ein "\r" -> genauso...
Hat sonst noch jemand eine Idee, was ich probieren kann? ich werd hier noch wahnsinnig...
 

TDO88

Bekanntes Mitglied
Habs jetzt gelöst... Das Problem war der Redirect in die Datei!
Dadurch war der String wohl für den InputStreamReader nicht mehr vorhanden!
=> Zeilen mit dem Redirect auf Datei entfernt und schon gehts
 

Joose

Top Contributor
Jetzt wo du es sagst ist es eigentlich logisch. Durch den redirect werden die Daten vom Stream in die Datei geschrieben und sind nicht mehr verfügbar am Stream.
Kleine Details an welche man nicht immer denkt ;)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Super User via Processbuilder (Linux) Allgemeine Java-Themen 3
S Command funktioniert in Kommandzeile aber nicht mit ProcessBuilder bzw. Runtime.exec auf MAC Allgemeine Java-Themen 3
H Syntax ProcessBuilder Allgemeine Java-Themen 7
E ProcessBuilder findet Datei nicht Allgemeine Java-Themen 3
V ProcessBuilder exe file Allgemeine Java-Themen 3
D ProcessBuilder und die while() Allgemeine Java-Themen 3
L Input/Output ProcessBuilder und Windows - Konsole verbergen? Allgemeine Java-Themen 5
T ProcessBuilder (java.lang.NoClassDefFoundError) Allgemeine Java-Themen 2
G ProcessBuilder Allgemeine Java-Themen 2
B Externe Programme und ProcessBuilder Allgemeine Java-Themen 5
V Shellscript über ProcessBuilder starten Allgemeine Java-Themen 2
A ProcessBuilder Allgemeine Java-Themen 8
Y ProcessBuilder, Prozess wird gestartet, aber Anwendung nicht Allgemeine Java-Themen 5
B ProcessBuilder: kann Ordner im home nicht finden Allgemeine Java-Themen 2
W Windows XP: ProcessBuilder.start: Kommandoshell anzeigen Allgemeine Java-Themen 3
A Runtime oder ProcessBuilder exe starten Allgemeine Java-Themen 3
N ProcessBuilder Allgemeine Java-Themen 5
N ProcessBuilder Allgemeine Java-Themen 8
F ProcessBuilder - Exception Allgemeine Java-Themen 2
J Handle + ProcessBuilder: Wer sieht den Fehler? Allgemeine Java-Themen 2
D Formatierte Ausgabe vom ProcessBuilder Allgemeine Java-Themen 4
D ProcessBuilder und Scanner Probleme mit einigen Prozessen Allgemeine Java-Themen 2
F Pfadangabe bei Processbuilder Allgemeine Java-Themen 4
E Output Fehler (Java-Programm Kuchen) Allgemeine Java-Themen 11
harrytut Java Input/Output Tests Junit Allgemeine Java-Themen 3
Tobero Batch Vorgang zum output Allgemeine Java-Themen 3
B In Java Methode mit generic input und output basteln? Allgemeine Java-Themen 4
X Output von ArrayList Allgemeine Java-Themen 3
S Gradle "schluckt" output und error Allgemeine Java-Themen 1
S Unerwarteter Output (kleines Raetsel) Allgemeine Java-Themen 6
TheWhiteShadow 2D-Grafik GIF Library mit byte output Allgemeine Java-Themen 10
J Java Sound Api Sound input und Output auswählen Allgemeine Java-Themen 4
T Threads Input/Output im Thread - Datei ohne Inhalt Allgemeine Java-Themen 1
M Output einer anderen/externen .jar in eigene JTextArea Allgemeine Java-Themen 4
B Input/Output Server Startet, Jedoch Kein Output. Allgemeine Java-Themen 1
N Kalender Normen input/output Allgemeine Java-Themen 2
B Best Practice HTML Output Optimal implementieren Allgemeine Java-Themen 3
H Input/Output Binäre Daten konvertieren, Output hat Zeilenumbrüche?? Allgemeine Java-Themen 9
G LayoutManager Launch4j: Launcher startet nur in Output Directory Allgemeine Java-Themen 4
G Swing JEditorPaneAppender (Output im HTML-Format) Allgemeine Java-Themen 12
H Binary File Output Allgemeine Java-Themen 15
G Output eines über Runtime.getRuntime.exec gestarteten Jars Allgemeine Java-Themen 6
W In Runtime Output schreiben Allgemeine Java-Themen 5
O Output From Java Creator? Allgemeine Java-Themen 3
J Threads + Dualcore = Probleme mit dem Output auf der Konsole Allgemeine Java-Themen 12
R InputStream - seltsamer Output Allgemeine Java-Themen 2
N IOException: "Reading from an output buffer" ? Allgemeine Java-Themen 2
K Output eines Runtimes Allgemeine Java-Themen 2
C Process output Allgemeine Java-Themen 7
M Output Stream / Protokoll does not support output Allgemeine Java-Themen 2
J Output Stream Allgemeine Java-Themen 4

Ähnliche Java Themen


Oben