Perl canaliza algunos fuera del script y otros a la pantalla

Perl canaliza algunos fuera del script y otros a la pantalla

¿Cómo puedo canalizar una salida a la pantalla y otra salida seleccionada fuera del script Perl?

Respuesta1

Utilizando diferentes identificadores de archivos.

De forma predeterminada tendrás ambos STDOUTy STDERR. La printfunción en Perl es muy breve para print STDOUT.

En su terminal STDOUTse le proporciona el identificador del archivo 1y STDERRse le proporciona el identificador del archivo 2.

A continuación se muestra un ejemplo de cómo imprimir en cada identificador de archivo y redirigir cada uno a /dev/null.

$ perl -e 'print STDOUT "foo\n"; print STDERR "bar\n";'
foo
bar
$ perl -e 'print STDOUT "foo\n"; print STDERR "bar\n";' 1> /dev/null
bar
% perl -e 'print STDOUT "foo\n"; print STDERR "bar\n";' 2> /dev/null
foo
  • El primer comando imprime ambos.
  • El segundo comando se descarta STDOUTy solo imprime.STDERR
  • El tercer comando se desecha STDERRy sólo imprime.STDOUT

También puede declarar sus propios identificadores de archivos (por ejemplo, un archivo de registro) e imprimirlos en su lugar. Ver perldoc -f open.

Respuesta2

probablemente quieras leer la documentación de perlipc, en particular la sección sobre Canalizaciones con nombre.

http://perldoc.perl.org/perlipc.html#Named-Pipes

perlipc: comunicación entre procesos de Perl (señales, fifos, tuberías, subprocesos seguros, sockets y semáforos)

Si necesita comunicación bidireccional (lectura y escritura) con un programa externo, entonces los módulos IPC::Open2 o IPC::Open3 (perl lib estándar, también documentado en la URL anterior) serán útiles.

información relacionada