2012-05-21 20 views
9

Uruchamiam program Perl. Cokolwiek jest drukowane na mojej konsoli, chcę przekierować do pliku tekstowego.Jak przekierować wyjście konsoli do pliku tekstowego

+7

Dlaczego nie po prostu zrobić to z poziomu wiersza poleceń: 'perl -w my_program.pl> output.txt'? –

+1

@PaulR Nie mogę dać +1. Opublikuj to jako odpowiedź - jest to właściwy sposób na zrobienie tego. – Polynomial

+1

http://stackoverflow.com/questions/387702/how-can-i-hook-into-perls-print –

Odpowiedz

16

Preferowaną metodą jest obsługa przekierowania za pośrednictwem wiersza polecenia, np.

perl -w my_program.pl > my_output.txt 

Jeśli chcesz także wyjście stderr następnie można to zrobić (zakładając swoją powłoki bash):

perl -w my_program.pl &> my_output.txt 
+0

próbowałem już tego, ale nie działa. Używam STDERR w moim pliku ..... – Cindrella

+0

OK - patrz wyżej - zajmij trochę czasu, aby nauczyć się podstaw linii poleceń dla Linuksa itd. –

+0

Dzięki ....w pliku użyłem open STDERR, "> output.txt"; close STDERR; jego działanie ... – Cindrella

10

W CLI można użyć > coś takiego:

perl <args> script_name.pl > path_to_your_file 

Jeśli chcesz to zrobić w skrypcie perla, dodaj ten kod przed wydrukowaniem czegokolwiek:

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 
+0

już zmęczony tym ... nie działa Użyłem print STDERR w moim pliku. ... – Cindrella

+1

cóż, jeśli masz wyraźne odbitki do różnych uchwytów plików, powinieneś postępować zgodnie ze sposobem CLI, jak zaleca Paul R, a to pytanie prawdopodobnie powinno być oznaczone jako 'bash' lub podobne, ponieważ ma niewiele wspólnego z samym Perlem – ArtM

5

W systemie Unix, aby przechwycić wszystko, co trafia do twojego terminala, chcesz przekierować zarówno standardowe wyjście, jak i standardowy błąd.

z bashu polecenie przypomina

$ ./my-perl-program arg1 arg2 argn > output.txt 2>&1 

powłoki C csh pochodne, takie jak tcsh i nowe wersje bash zrozumieć

$ ./my-perl-program arg1 arg2 argn >& output.txt 

oznaczać to samo.

Składnia powłoki poleceń w systemie Windows przypomina powłokę Bourne'a.

C:\> my-perl-program.pl args 1> output.txt 2>&1 

Aby skonfigurować to przekierowanie w kodzie Perl, dodać

open STDOUT, ">", "output.txt" or die "$0: open: $!"; 
open STDERR, ">&STDOUT"  or die "$0: dup: $!"; 

do początku programu ’ s sprawozdania wykonywalnych.

1

Jeśli chcesz, aby Twoje wyniki będą drukowane na konsoli, a także dzienniki następnie dołączyć tę linię do ciebie kodu (np przed żadnej instrukcji print)

open (STDOUT, "| tee -ai logs.txt"); 
print "It Works!"; 

po ostatnim drukiem w skrypcie

close (STDOUT); 

tylko dla komunikatów o błędach,

open (STDERR, "| tee -ai errorlogs.txt"); 
Powiązane problemy