Re: Pipes in Perl

Datumsansicht Baumansicht Betreffansicht Attachement-Sicht

From: Christian Weisgerber (naddy_at_mips.rhein-neckar.de)
Date: 08. Feb 2000


Michael Lestinsky <michael_at_zaphod.rhein-neckar.de> wrote:

> open (FH, "/pfad/programm param1 param2 param3 |");
> while (<FH>) {
> print $_;
> }
> close FH;

ACK

> Das heißt, das Programm wird aufgerufen, und erst, wenn es wieder
> terminiert, dann werden auch die Daten ausgegeben.

Das heißt es nicht.
Wahrscheinlich bleibt im konkreten Fall die Ausgabe im Stdout-Puffer
des Programms stecken. Per Default ist Stdout zu einem TTY zeilenweise
gepuffert, sonst blockweise (8kB oder so). Das ist eine Funktion des
stdio-Teils der libc.

> Kann ich irgendwie an den Output des aufgerufenen Programms
> kommen, noch während es läuft?

Du musst es um fflush(3) an gewünschter Stelle erweitern.

> Kann ich eigentlich auch irgendwie das STDERR des aufgerufenen
> Programms umleiten?

Siehe perlipc(1).
Ansonsten kann man mit pipe(), fork(), dup(), exec() in der gewohnten
Weise selbst Hand anlegen.

PS: Morgen Abend ohne mich, ich kuriere noch an den Nachwirkungen einer
    Grippe rum.

-- 
Christian "naddy" Weisgerber                  naddy_at_mips.rhein-neckar.de


Datumsansicht Baumansicht Betreffansicht Attachement-Sicht

Dieses Archiv wurde generiert von hypermail 2.1.2 : 11. Mar 2002 CET