Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer

Execute command, show realtime output and get exit code

by afunix (Initiate)
on Nov 01, 2011 at 12:24 UTC ( #935100=perlquestion: print w/replies, xml ) Need Help??
afunix has asked for the wisdom of the Perl Monks concerning the following question:


I need to execute command, display it's output and get exit code.
open(X, '-|', 'cmd') is a good one, but it returns pid in this form and $? is zero, so I can't get a return code.
`cmd` can do everything, but it returns output after command was executed, and I need to display output and put it into log file, just like tee.
There is one more way, the most complicated:
my $pid = open(PIPE, '-|'); die "open(): $?" unless (defined $pid); if ($pid) { while (<PIPE>) { print $_; } close(PIPE); } else { die "system(): $!" unless (system($cmd)); die "failed to execute: $!" if ($? == -1); die "signal: ". ($? & 127) if ($? & 127); die "exit code: ". ($? >> 8) if ($? >> 8); }
There is just one problem. I need to deliver $? into parent process...

So, dear monks, is there any way to receive command output in a realtime and get it's exit code in some easy way?

Replies are listed 'Best First'.
Re: Execute command, show realtime output and get exit code
by Eliya (Vicar) on Nov 01, 2011 at 19:31 UTC
    ...and $? is zero, so I can't get a return code.

    close waits for the subprocess and sets $?:

    my $pid = open X, '-|', 'echo foo; exit 42' or die $!; my $out = <X>; my $ok = close X; print STDERR "out=$out"; printf STDERR "\$?=%s\n", $? >> 8 unless $ok; __END__ out=foo $?=42

    See close for details.

      Thanks! You really prevented me from inventing a wheel :)

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://935100]
Approved by Corion
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others having an uproarious good time at the Monastery: (11)
As of 2018-03-22 16:49 GMT
Find Nodes?
    Voting Booth?
    When I think of a mole I think of:

    Results (280 votes). Check out past polls.