Ich führe ein Perl-Programm aus. Was immer auf meiner Konsole gedruckt wird, ich möchte In eine Textdatei umleiten.
Das bevorzugte Verfahren hierfür ist, die Umleitung über die Befehlszeile abzuwickeln, z.
Perl -w my_program.pl > my_output.txt
Wenn Sie auch die Ausgabe von stderr einschließen möchten, können Sie dies tun (vorausgesetzt, Ihre Shell ist bash):
Perl -w my_program.pl &> my_output.txt
In der CLI können Sie >
wie folgt verwenden:
Perl <args> script_name.pl > path_to_your_file
Wenn Sie dies innerhalb des Perl-Skripts tun möchten, fügen Sie diesen Code hinzu, bevor Sie etwas drucken:
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
Wenn Sie unter Unix alles erfassen möchten, was an Ihr Terminal gesendet wird, möchten Sie sowohl die Standardausgabe als auch den Standardfehler umleiten.
Mit Bash ähnelt der Befehl
$ ./my-Perl-program arg1 arg2 argn > output.txt 2>&1
Die C-Shell, csh
-Derivate wie tcsh
und neuere Versionen von bash verstehen
$ ./my-Perl-program arg1 arg2 argn >& output.txt
dasselbe zu bedeuten.
Die Syntax für den Befehl Shell unter Windows ähnelt der von Bourne Shell.
C:\> my-Perl-program.pl args 1> output.txt 2>&1
Um diese Umleitung in Ihrem Perl-Code einzurichten, fügen Sie hinzu
open STDOUT, ">", "output.txt" or die "$0: open: $!";
open STDERR, ">&STDOUT" or die "$0: dup: $!";
an den Anfang der ausführbaren Anweisungen Ihres Programms.
Wenn Sie möchten, dass Ihre Ausgabe auf der Konsole sowie Protokolle gedruckt werden, hängen Sie diese Zeile an Ihren Code an (z. B. vor Druckanweisungen).
open (STDOUT, "| tee -ai logs.txt");
print "It Works!";
Nach dem letzten Druck in Ihrem Skript
close (STDOUT);
Nur für Fehlermeldungen
open (STDERR, "| tee -ai errorlogs.txt");