• Publicidad

¿Cómo capturar STDERR?

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

¿Cómo capturar STDERR?

Notapor creating021 » 2007-08-07 16:22 @723

¿Cómo Capturar STDERR y ponerlo en un array?

Resulta que ejecuto X programa y no se puede usar `` puesto que el programa es interactivo.
De ese programa quiero tomar todo lo que se va a STDERR sin alterar el uso del programa... por ejemplo.
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
rm -i /tmp/*
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4

¿Debería hacerlo con IPC::Open3 o hay alguna forma de hacerl 100% en Perl (sin módulos externos) o que otra solución me pueden dar?
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Perlero frecuente
Perlero frecuente
 
Mensajes: 595
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor

Publicidad

Notapor kidd » 2007-08-07 16:26 @727

Uriel Lizama Perl programmer fundador de Perl en Español
Perl Programming Language
Avatar de Usuario
kidd
Creador de Perl en Español
Creador de Perl en Español
 
Mensajes: 1166
Registrado: 2003-10-15 16:52 @744
Ubicación: México

Notapor creating021 » 2007-08-07 17:45 @781

Hola, gracias por la pronta respuesta.

Las soluciones que comentas no me funcionan por lo siguiente:
Al ejecutar el comando con 2>&1 manda el error a STDOUT y yo quiero meterlo en un array.

El módulo que comentas es para los errores que hay dentro del script... no captura los errores de una ejecución (lo hacer por $SIG{__WARN__}).

Lo que quiero es tomar perror de sdio.h (STDERR)
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Perlero frecuente
Perlero frecuente
 
Mensajes: 595
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor

Notapor creating021 » 2007-09-10 18:47 @824

Bueno, opté por usar IPC::Open3 (después miro más a fondo el funcionamiento de pipes para aprender) pero ahora necesito trabajar en un problema:
Abro el programa y éste imprime un par de cosas a STDERR a su vez a STDOUT y está esperando por STDOUT.
Para lidiar con esto se me ocurre usar una implementación de thread (de CPAN) para poder trabajar cada uno de los standard streams pero dudo si sea la mejor forma y quiero su opinión antes de empezar.
¿Fork, Threads u otro?
Gracias :)
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Perlero frecuente
Perlero frecuente
 
Mensajes: 595
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor

Notapor Perl user » 2007-09-11 02:24 @142

creating021 escribiste:Hola, gracias por la pronta respuesta.

Las soluciones que comentas no me funcionan por lo siguiente:
Al ejecutar el comando con 2>&1 manda el error a STDOUT y yo quiero meterlo en un array.

El módulo que comentas es para los errores que hay dentro del script... no captura los errores de una ejecución (lo hacer por $SIG{__WARN__}).

Lo que quiero es tomar perror de sdio.h (STDERR)


Qué tal,

Mira si sólo quieres ejecutar un proceso del sistema, entonces esa solución funciona:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl
use strict;
use warnings;

open my $proc, '-|', 'rm -i * 2>&1' or die $!;
chomp (my @stderr = <$proc>);
close $proc;
 
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Si el proceso no es del sistema (por ejemplo código en Perl que quieres correr en ese mismo programa), entonces si necesitas hacer un fork, y controlar tu los conductos de salida y error.. Una solución aparte de Open::IPC3 y el uso de popen(), sería el uso de POE::Pipe::TwoWay (funciona sin POE).

Prácticamente la solución consiste en mandar el STDERR como la salida de un proceso, a la entrada del otro.

Saludos
Marco A. Manzo
[email protected]
http://www.unixmonkeys.com/amnesiac/
Perl Programming Language
Perl user
Maestro honorario
Maestro honorario
 
Mensajes: 271
Registrado: 2004-11-03 21:11 @924

Notapor creating021 » 2007-09-14 17:48 @783

Muchas gracias, molto gracie, thank you very much, merci beaucoup, dank u zeer, muito obrigado... :)
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Perlero frecuente
Perlero frecuente
 
Mensajes: 595
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 18 invitados