2012-05-21 15 views
9

Estoy ejecutando un programa Perl. Lo que se imprime en mi consola, quiero redireccionar a un archivo de texto.Cómo redirigir la salida de la consola a un archivo de texto

+7

¿Por qué no hacerlo desde la línea de comandos: 'perl -w my_program.pl> output.txt'? –

+1

@PaulR No puedo +1 suficiente. Publique eso como una respuesta: es la forma correcta de hacerlo. – Polynomial

+1

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

Respuesta

16

El método preferido para esto es manejar la redirección a través de la línea de comando, p.

perl -w my_program.pl > my_output.txt 

Si desea incluir también la salida stderr entonces usted puede hacer esto (suponiendo que su cáscara se bash):

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

ya lo intenté pero no funcionaba. he usado STDERR en mi archivo ..... – Cindrella

+0

OK - vea la edición anterior - también tómese un tiempo para aprender los principios básicos de la línea de comandos para Linux, etc. –

+0

Gracias ....en el archivo que he utilizado, abre STDERR, '> output.txt'; cerrar STDERR; funciona ... – Cindrella

10

En la CLI puede utilizar >, así:

perl <args> script_name.pl > path_to_your_file 

Si desea hacer esto dentro de la secuencia de comandos perl, agregue este código antes de imprimir cualquier cosa:

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

ya estoy cansado de esto ... no funciona He usado print STDERR en mi archivo. .... – Cindrella

+1

bueno, si tiene impresiones explícitas en diferentes manejadores de archivos, entonces debe seguir el modo CLI como lo recomienda Paul R y esta pregunta probablemente debería etiquetarse como 'bash' o similar porque tiene poco que ver con Perl mismo – ArtM

5

En Unix, para capturar todo lo que llega a su terminal, desea redirigir tanto la salida estándar como el error estándar.

Con bash, el comando se asemeja

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

El shell C, csh derivados tales como tcsh, y nuevas versiones de golpe entienden

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

para significar la misma cosa.

La sintaxis para el shell de comandos en Windows es similar a la del shell de Bourne.

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

Para configurar esta redirección en el código Perl, añadir

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

al comienzo de su programa de instrucciones ejecutables ’ s.

1

Si desea que su salida se imprime en la consola, así como los registros a continuación, añada esta línea a su código (por ejemplo, antes de que las declaraciones de impresión)

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

Después de la última impresión en el script

close (STDOUT); 

Por sólo mensajes de error,

open (STDERR, "| tee -ai errorlogs.txt"); 
Cuestiones relacionadas