我正在尝试使用以下命令监视外部命令的输出AnyEvent::Subprocess
:
use feature qw(say);
use strict;
use warnings;
use AnyEvent::Subprocess;
my $job = AnyEvent::Subprocess->new(
delegates => [ 'StandardHandles', 'CompletionCondvar' ],
code => 'myscript.pl',
);
my $run = $job->run;
my $condvar = $run->delegate('completion_condvar');
$run->delegate('stdout')->handle->on_read(
sub {
my ( $handle ) = @_;
my $line = $handle->rbuf;
chomp $line;
say "Got output: '$line'";
$handle->rbuf = ""; # clear buffer
}
);
my $done = $condvar->recv;
一般来说,我无法访问外部脚本的源代码,因此我无法将类似的命令插入STDOUT->autoflush(1)
到脚本中(如果脚本恰好是 Perl 脚本)。
这是我用于测试的测试脚本:
myscript.pl:
use feature qw(say);
use strict;
use warnings;
#STDOUT->autoflush(1);
sleep 1;
say "data 1";
sleep 1;
say "data 2";
sleep 1;
say "data 3";
完成后输出立即全部出现myscript.pl
。我想在myscript.pl
可用时打印每一行。如何在不修改的情况下做到这一点myscript.pl
?