afunix has asked for the wisdom of the Perl Monks concerning the following question:
Hello!
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:
So, dear monks, is there any way to receive command output in a realtime and get it's exit code in some easy way?
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:
There is just one problem. I need to deliver $? into parent process...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); }
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 | |
by afunix (Initiate) on Nov 02, 2011 at 05:32 UTC |
Back to
Seekers of Perl Wisdom