Ich versuche, die Ausgabe eines externen Programms mit Java zu erfassen, aber ich kann nicht.
Ich habe den Code, um es zu zeigen, aber nicht um es in eine Variable zu setzen.
Ich werde zum Beispiel sqlplus verwenden, um meinen Oracle-Code "in exec.sql" auszuführen. system / orcl @ orcl: Benutzer / Passwort / DB-Name
%Vor%Da der Prozess in einem neuen Thread ausgeführt wird, ist es wahrscheinlich, dass keine Ausgabe oder unvollständige Ausgabe verfügbar ist, wenn Sie zu Ihrer while-Schleife kommen.
%Vor%Sie müssen also warten, bis der Prozess abgeschlossen ist, bevor Sie versuchen, mit der Ausgabe zu interagieren. Versuchen Sie es mit dem Process.waitFor () Methode, um den aktuellen Thread anzuhalten, bis der Prozess abgeschlossen werden konnte.
%Vor%Dies ist nur ein einfacher Ansatz, Sie könnten auch die Ausgabe des Prozesses parallel verarbeiten, aber dann müssten Sie den Status des Prozesses überwachen, dh ob er noch läuft oder abgeschlossen ist, und die Verfügbarkeit der Ausgabe .
Benutze Apache Commons Exec , es wird dir das Leben sehr erleichtern. In den Anleitungen finden Sie Informationen zur grundlegenden Verwendung. Um die Befehlszeilenausgabe nach dem Erhalt eines executor
-Objekts (wahrscheinlich DefaultExecutor
) zu lesen, erstellen Sie OutputStream
zu dem gewünschten Stream (dh eine FileOutputStream
-Instanz oder System.out
) und: