Output-Steam von Konsole abfangen

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Guten Abend. :)

    Kommen wir direkt zur Frage.

    Ich führe per Java einen Konsolenbefehl aus. Dieser läuft auch soweit.

    Nun möchte ich aber Kommandos laufen lassen, welche endlos sind. Das bedeutet, dass ich den Stream abfangen muss, um die ankommenden Daten dann in meinem Programm verarbeiten zu können.

    Hier ist der Code den ich zur Zeit verwende, der jedoch nicht meinen Ansprüchen genügt, da das Programm erst weitermacht, wenn der Befehl abgeschlossen ist.
    Diesen Code habe ich so im Netz gefunden. Leider bin ich nicht oft mit Java unterwegs, daher hoffe ich auf Hilfe.

  • Ich glaube es wäre verständlicher (zu mindest für mich) wenn du sagst was du eigentlich vor hast. Denn um einen Befehl in der Kommandozeile in Schleife laufen zu lassen brauch man kein Java.

    --
    man ist das System-Anzeigeprogramm für die Handbuchseiten von Linux.

  • Kurze Antwort: p.waitFor() weg.

    Jetzt wird's aber erst interessant: der ErrorStream geht natuerlich so auch
    nicht zu, also muss die erste Schleife auch weg.

    Der InputStream wird ebenfalls nicht fertig bis das Programm endet. Dadurch
    wird die zweite Schleife endlos ....

    Erst denken, dann coden :fies:

    Einmal editiert, zuletzt von Tell (13. Oktober 2014 um 21:18)

  • Ich lasse keinen Befehl in der Schleife laufen.

    Ich führe einen Befehl aus, welcher endlos im Terminal ausgeführt wird, denn er gibt ständig aktualisierte Daten zurück. Er bricht erst ab, wenn ich es ihm sage.

    Diese will ich zur Laufzeit abfangen und in meiner GUI ausgeben.


    Das p.waitFor() ist nötig, ohne lässt es sich nicht kompilieren.

    Der gepostete Code funktioniert ja so wie er ist, jedoch nur mit Befehlen welche auch ein Ende haben. Sprich den Output von z.B. "ifconfig" bekomme ich ohne Probleme.

    Einmal editiert, zuletzt von Teepo (13. Oktober 2014 um 22:56)

  • Was heißt Befehle, welche ein Ende haben?

    Suchst du das?

    Code
    Process p = Runtime.getRuntime().exec("befehl > /dev/null 2>&1 &");
  • So, ich habe gefunden was ich gesucht habe. :)

    Code
    ProcessBuilder builder = new ProcessBuilder("kommndo","parameter1","parameter2");
                builder.redirectErrorStream(true);
                Process process = builder.start();
                InputStream is = process.getInputStream();
                BufferedReader reader = new BufferedReader(new InputStreamReader(is));
    
    
                String line = null;
                while ((line = reader.readLine()) != null)
                   System.out.println(line);

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!