On Wed, 1 May 2013 07:58:38 -0700
"Ron Bergin" <[email protected]> wrote:
> Manfred Lotz wrote:
> > Hi there,
> > I have a script where I log stuff to a file and the same time
> > displays it to stdout using Log4perl.
> >
> > Here is a minimal example where I log a command which fails.
> >
> > <--------------------snip------------------------->
> > #! /usr/bin/perl
> >
> > use strict;
> > use warnings;
> >
> > #use autodie;
> > use Log::Log4perl qw(:easy);
> >
> > Log::Log4perl->easy_init(
> > { level => $DEBUG, file => "> test.log", },
> > { level => $DEBUG, file => 'STDOUT', }
> > );
> >
> > my $cmd = 'uname';
> > my $parms = '-f'; # invalid parm
> >
> > INFO( "Issuing [$cmd $parms]" );
> > open my $fh, '-|', "$cmd $parms 2>&1" or die "open: $!";
> > INFO( "$_" ) while <$fh>;
> > close $fh;
> >
> > <--------------------snap------------------------->
> >
> > This works great. Output is like this:
> > 2013/05/01 16:16:40 Issuing [uname -f]
> > 2013/05/01 16:16:40 uname: invalid option -- 'f'
> > 2013/05/01 16:16:40 Try 'uname --help' for more information.
> >
> >
> > However, if I add autodie then I get:
> >
> > 2013/05/01 16:16:33 Issuing [uname -f]
> > 2013/05/01 16:16:33 uname: invalid option -- 'f'
> > 2013/05/01 16:16:33 Try 'uname --help' for more information.
> > Can't close(GLOB(0x2554c80)) filehandle: '' at ./test02.pl line 20
> >
> >
> > close does not fail if the command is ok, e.g. 'uname -a'. Can
> > anybody explain to me why close fails in the example above?
> >
> >
> >
> > --
> > Thanks,
> > Manfred
>
> If you test the return code of the close call, you'll see that it
> fails in both cases.
>
> I'm not sure why it's failing, but personally I'd use IPC::Open3
> instead of opening the pipe as you are currently doing. That way,
> you could capture the stdout and stderr separately and log the stderr
> as WARN or ERROR.
>
> Ron Bergin
>
>
Hm, I'll take a look a IPC::Open3. However, I prefer to have stdout and stderr
merged.
--
Manfred
--
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
http://learn.perl.org/