web-dev-qa-db-fra.com

Comment rediriger la sortie de la console vers un fichier texte

J'exécute un programme Perl. Tout ce qui est imprimé sur ma console, je veux rediriger Vers un fichier texte.

9
Cindrella

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
16
Paul R

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
10
ArtM

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.

5
Greg Bacon

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");
1
MayurKubavat