J'exécute un programme Perl. Tout ce qui est imprimé sur ma console, je veux rediriger Vers un fichier texte.
La méthode préférée pour cela consiste à gérer la redirection via la ligne de commande, par exemple.
Perl -w my_program.pl > my_output.txt
Si vous souhaitez également inclure la sortie stderr, vous pouvez le faire (en supposant que votre shell est bash):
Perl -w my_program.pl &> my_output.txt
Dans la CLI, vous pouvez utiliser >
, comme ceci:
Perl <args> script_name.pl > path_to_your_file
Si vous voulez faire cela dans le script Perl, ajoutez ce code avant d’imprimer quoi que ce soit:
open(FH, '>', 'path_to_your_file') or die "cannot open file";
select FH;
# ...
# ... everything you print should be redirected to your file
# ...
close FH; # in the end
Sous Unix, pour capturer tout ce qui va sur votre terminal, vous voulez rediriger à la fois la sortie standard et l'erreur standard.
Avec bash, la commande ressemble à
$ ./my-Perl-program arg1 arg2 argn > output.txt 2>&1
Le shell C, les dérivés csh
tels que tcsh
et les versions plus récentes de bash comprennent
$ ./my-Perl-program arg1 arg2 argn >& output.txt
signifier la même chose.
La syntaxe de la commande Shell sous Windows ressemble à celle de Bourne Shell.
C:\> my-Perl-program.pl args 1> output.txt 2>&1
Pour configurer cette redirection dans votre code Perl, ajoutez
open STDOUT, ">", "output.txt" or die "$0: open: $!";
open STDERR, ">&STDOUT" or die "$0: dup: $!";
au début des instructions exécutables de votre programme.
Si vous souhaitez que votre sortie soit imprimée sur la console ainsi que les journaux, ajoutez cette ligne à votre code (par exemple, avant toute instruction d'impression).
open (STDOUT, "| tee -ai logs.txt");
print "It Works!";
Après la dernière impression dans votre script
close (STDOUT);
Pour les messages d'erreur uniquement,
open (STDERR, "| tee -ai errorlogs.txt");