web-dev-qa-db-de.com

So leiten Sie die Konsolenausgabe in eine Textdatei um

Ich führe ein Perl-Programm aus. Was immer auf meiner Konsole gedruckt wird, ich möchte In eine Textdatei umleiten.

9
Cindrella

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

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

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.

5
Greg Bacon

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