I would like to achieve the following: Run a command and capture its output. While waiting for output, run a subroutine every 10 seconds.
Sounds like exactly the kind of job IPC::Run can do:
use warnings; use strict; use IPC::Run qw/ harness timer /; my @cmd = ( 'perl','-le','sleep 60; print "Done!"' ); my $h = harness \@cmd, \undef, \my $out, \my $err, ( my $t = timer 10 ); my $startt = time; $h->start; printf "%2d started\n", time-$startt; while ( $h->pumpable ) { $t->start; $h->pump; printf "%2d pumped\n", time-$startt; } $h->finish; printf "%2d finished\n", time-$startt; print "stdout: <<$out>>\nstderr: <<$err>>\n";
You can also capture the "live" output of the command, The $out and $err variables should be updated as data from the external program comes in.
Update: See IPC::Run::Timer for details on the timings (on my system the delay in the above ends up being about 11 seconds).
In reply to Re: Using SIG{ALRM} within while loop.
by haukex
in thread Using SIG{ALRM} within while loop.
by evroom
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |