User since
2003-12-21
33
Artikel
BenutzerIn
Hi Leute,
habe folgendes Problem:
Ich rufe ein Programm aus meinem Perlscript auf, das z.B. jede Sekunde eine Ausgabezeile produziert... Wie schaffe ich es, die ausgaben des Programms während der Laufzeit zu verarbeiten?
User since
2003-08-04
2536
Artikel
ModeratorIn
open(PROGRAM, "/pfad/zum/programm|") || die $!;
while(<PROGRAM>)
{
# tu was mit der ausgabe in $_
}
close(PROGRAM);
User since
2003-09-10
141
Artikel
BenutzerIn
$var = qx("prog.exe");
print $var;
Haut mich nicht, ich bin ein Noob!
User since
2003-08-04
2536
Artikel
ModeratorIn
das würde zwar den gesamten output auslesen, aber nicht während der laufzeit des programmes eine verarbeitung zulassen, d.h. bei 10 zeilen mit je einer sekunde verzögerung hätte man das print von 10 zeilen nach 10 sekunden, nicht entsprechend 10 mal eine zeile je sekunde...
User since
2003-08-04
1706
Artikel
HausmeisterIn
Funktioniert aber alles nur wenn die Ausgabe auch wirklich auf STDOUT passiert.
Gruß Alex
User since
2003-08-04
7321
Artikel
ModeratorIn
[quote=format_c,09.04.2004, 13:24]Funktioniert aber alles nur wenn die Ausgabe auch wirklich auf STDOUT passiert.
Gruß Alex[/quote]
irgendwie kann man da auch STDERR abfangen bzw. beides!
User since
2003-08-04
7321
Artikel
ModeratorIn
so irgendwie
if(open(CMD, "programm.exe <parameterliste> 2>\&1 |"))
while(<CMD>)
{
print;
}
close(CMD);
\n\n
<!--EDIT|esskar|1081514136-->
User since
2003-08-04
1706
Artikel
HausmeisterIn
Das hab ich schon öfters gesehen weis aber nicht was das abedeutet. wenn man make macht sieht man das häuftig. Was macht denn 2> &1 ?? Also 2> ist einge Umleitung der Ausgabe aber das &1?
Gruß Alex
User since
2003-08-04
7321
Artikel
ModeratorIn
leitet STDERR (also 2) nach STDOUT (also 1) um!