Der folgende Code funktioniert Art fein:Wie bekomme ich die Ausgabe von einer Perl-Pipe, wie sie verfügbar ist?
open(PIPE, '-|', 'ant');
for(<PIPE>) {
print;
}
Allerdings ist es nicht tun, was ich will. Da der Ant-Build 5 Minuten dauern kann, möchte ich die Ausgabe Zeile für Zeile sehen. Stattdessen erhalte ich die gesamte Eingabe am Ende des Prozesses.
Wenn Sie es mit dem Perl-Debugger betrachten, wartet Perl auf die 'for'-Anweisung, bis Ant beendet wird. Warum das?
Pufferung ist wahrscheinlich das Problem, aber der problematische Puffer ist auf der Seite von Ant, nicht von Perl. Sie müssen die Pufferung nur für Ausgabepipel und nicht für Pipelines deaktivieren.Sie müssen einen Weg finden, um Ant zu sagen, dass es seine Ausgabe nicht puffern soll. Sie können das Problem nicht auf der Perl-Seite beheben. – cjm