Comment puis-je exécuter une commande externe et capturer sa sortie en Perl?
Je suis nouveau sur Perl et que vous voulez savoir de manière à exécuter une commande externe (appel il prg
) dans les scénarios suivants:
- Exécuter
prg
sonstdout
seulement. - Exécuter
prg
sonstderr
seulement. - Exécuter
prg
sonstdout
etstderr
séparément.
source d'informationauteur gameover
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser le backtics pour l'exécution de votre programme externe et la capture de son
stdout
etstderr
.Par défaut, les backticks jeter le
stderr
et de ne renvoyer que lesstdout
du programme externe.DoncPermettra de saisir les
stdout
du programme cmd et jetezstderr
.Pour capturer seulement
stderr
vous pouvez utiliser le shell de descripteurs de fichiers:Pour saisir à la fois
stdout
etstderr
que vous pouvez faire:À l'aide de ce qui précède, vous ne serez pas capable de différencier
stderr
destdout
. Pour separtestdout
destderr
pouvez rediriger la fois dans un fichier séparé et de lire les fichiers:Vous pouvez utiliser IPC::Open3 ou IPC::Run. Aussi, lire Comment puis-je capturer la sortie STDERR d'une commande externe de perlfaq8.
Dans la plupart des cas, vous pouvez utiliser le
qx//
opérateur (ou backticks). Il interpole les chaînes et les exécute avec la coque, de sorte que vous pouvez utiliser les redirections.Pour capturer une commande de la sortie standard (STDERR est pas affectée):
Pour capturer une commande STDERR et STDOUT ensemble:
Pour capturer une commande STDERR, mais jeter le STDOUT (l'ordre est important ici):
D'échange d'une commande de STDOUT et STDERR dans le but de capturer le STDERR, mais laisser le STDOUT de sortir de la vieille STDERR:
À lire à la fois une commande de la sortie standard (STDOUT) et de ses STDERR séparément, il est plus facile de les rediriger séparément pour les fichiers, puis de les lire à partir de ces fichiers lorsque le programme est terminé: