2010-07-31 4 views
2

J'utilise la syntaxe perl back-ticks pour exécuter certaines commandes. Je voudrais que la sortie de la commande soit écrite dans un fichier et aussi imprimée sur stdout. Je peux accomplir le premier en ajoutant un > à la fin de ma chaîne cochée en arrière, mais je ne sais pas à chaud pour que la sortie soit imprimée dès qu'elle est générée. Si je fais quelque chose commeComment recevoir une sortie de commande immédiatement?

print `command`; 

la sortie est imprimée seulement après command fin d'exécution.

Merci, Dave

Répondre

8

Vous ne pouvez pas le faire avec les accents graves, car ils renvoient au programme Perl que lorsque l'exécution est terminée.

Ainsi,

print `command1; command2; command3`; 

attendra que command3 se termine à quoi que ce soit de sortie.

Vous devez utiliser un tuyau au lieu de contre-apostrophes pour être en mesure d'obtenir la sortie immédiatement:

open (my $cmds, "-|", "command1; command2; command3"); 
while (<$cmds>) { 
     print; 
} 
close $cmds; 

Une fois que vous avez fait cela, vous avez ensuite si vous voulez ou non en mémoire tampon (selon la façon immédiate vous voulez que la sortie soit): Suffering from buffering?

pour imprimer et stocker la sortie, vous pouvez ouvrir() un fichier à écrire la sortie:

open (my $cmds, "-|", "command1; command2; command3"); 
open (my $outfile, ">", "file.txt"); 
while (<$cmds>) { 
     print; 
     print $outfile $_; 
} 
close $cmds; 
close $outfile; 
+0

Merci. Pouvez-vous m'expliquer/me référer à une explication de ce que fait la tuyauterie ('" - | "')? Et aussi, comment puis-je stocker la sortie de la commande dans un fichier (en plus de son impression)? –

+0

- | dit que la sortie de la commande est dirigée vers notre programme dans l'appel de trois paramètres open(). - | est à peu près équivalent à faire "command | our_program". De l'autre côté, | - dit que la sortie du programme out sera dirigée vers la commande, donc ce serait à peu près équivalent à "our_program | command". Ils ne sont pas exactement les mêmes, car our_program continue après que cela soit fait avec la commande, mais cela servira probablement à vous donner une idée. –

+0

Merci encore. Et pour la deuxième partie de ma question - comment puis-je sauvegarder la sortie dans un fichier "réel"? –

Questions connexes