Comment vider la production en backticks dans Perl?
Question
Si j'ai cette application perl:
print `someshellscript.sh`;
qui imprime tas de choses et prend beaucoup de temps pour terminer, comment puis-je imprimer cette sortie au milieu de l'exécution du script shell?
On dirait Perl n'imprimera le résultat de someshellscript.sh quand il est terminé, est-il un moyen de faire affleurant de sortie au milieu de l'exécution?
La solution
Qu'est-ce que vous voulez sans doute faire est quelque chose comme ceci:
open(F, "someshellscript.sh|");
while (<F>) {
print;
}
close(F);
Cela va someshellscript.sh
et ouvre un tuyau qui lit sa sortie. La boucle de while
lit chaque ligne de sortie généré par le script et l'imprime. Voir la ouvrir la page de documentation pour plus d'informations.
Autres conseils
Le problème est ici que s'échapper avec votre script stocke les apostrophes inverses à une chaîne, que vous pouvez ensuite imprimer. Pour cette raison, il n'y aurait aucun moyen de « flush » avec impression.
La commande système () doit imprimer sortie en continu, mais vous ne serez pas en mesure de capturer la sortie:
system "someshellscript.sh";