Patrick: Skript aus Perl heraus aufrufen

Hi!

Folgendes Problem:
Ich rufe ein Shell-Skript aus Perl per fopen auf.
Das Skript berechnet längere Zeit etwas und gibt die Ergebnisse nach und nach aus.
Ich schaffe es leider nicht diese Ausgaben auch in Perl nach und nach zu verarbeiten und gleich weiterzuleiten.
Perl erhält die Ausgaben erst alle auf einmal nach Beendigung des Skripts.
Wie erreiche ich jetzt, daß die Ausgaben des Skripts nicht mehr "gebuffert" werden? Wenn ich das Skript in der Konsole von Hand aufrufe, erhalte ich die Ausgaben ja auch sofort.

Danke im voraus

Patrick

  1. Hallo Patrick

    Folgendes Problem:
    Ich rufe ein Shell-Skript aus Perl per fopen auf.
    Das Skript berechnet längere Zeit etwas und gibt die Ergebnisse nach und nach aus.
    Ich schaffe es leider nicht diese Ausgaben auch in Perl nach und nach zu verarbeiten und gleich weiterzuleiten.
    Perl erhält die Ausgaben erst alle auf einmal nach Beendigung des Skripts.
    Wie erreiche ich jetzt, daß die Ausgaben des Skripts nicht mehr "gebuffert" werden? Wenn ich das Skript in der Konsole von Hand aufrufe, erhalte ich die Ausgaben ja auch sofort.

    Du rufst einen Prozeß auf und wenn der Fertig ist, dann geht die Kontrolle wieder zurück an Dein aufrufendes Perl Programm. Was Du willst ist eine Interprozeßkommunikation und das ist nicht ganz so trivial wie ein Aufruf über Backticks oder system();

    Lösungsansatz:
    use IPC::Open2;

    Ciao
       K@rl

    1. Du rufst einen Prozeß auf und wenn der Fertig ist, dann geht die Kontrolle wieder zurück an Dein aufrufendes Perl Programm. Was Du willst ist eine Interprozeßkommunikation und das ist nicht ganz so trivial wie ein Aufruf über Backticks oder system();

      Lösungsansatz:
      use IPC::Open2;

      Ciao
         K@rl

      Danke für die Amtwort!
      In Java hab ich sowas schon mal geschreiben, aber von Perl hab ich nicht so den Schimmer, die ganzen Zusatzfeatures kenn ich noch nicht so gut.

      Gruß

      Patrick

      1. Lösungsansatz:
        use IPC::Open2;

        Du solltest Dir natürlich die Doku / POD zu IPC::Open2 durchlesen; ist ein wenig tricky aber auch sehr einfach + elegant; wenn du auch STDERR abgreifen möchtest, dann verwende IPC::Open3 - aber lese dir beide Dokus durch!

        ciao
          K@rl