AnyEvent-Subprocess
view release on metacpan or search on metacpan
lib/AnyEvent/Subprocess/Easy.pm view on Meta::CPAN
package AnyEvent::Subprocess::Easy;
BEGIN {
$AnyEvent::Subprocess::Easy::VERSION = '1.102912';
}
# ABSTRACT: wrappers around AnyEvent::Subprocess to save typing in simple cases
use strict;
use warnings;
use AnyEvent;
use AnyEvent::Subprocess;
use Try::Tiny;
use Sub::Exporter -setup => {
exports => ['qx_nonblock'],
};
sub _build_input_capture_job {
my ($callback, $code, @delegates) = @_;
my $proc = AnyEvent::Subprocess->new(
delegates => [
'PrintError',
{ Handle => {
name => 'stdout',
direction => 'r',
replace => \*STDOUT,
}},
{ Capture => { handle => 'stdout' } },
@delegates,
],
code => $code,
on_completion => $callback,
);
return $proc;
}
sub qx_nonblock {
my (@args) = @_;
my $cmd = [@args];
$cmd = $args[0] if @args == 1;
my $result_ready = AnyEvent->condvar;
my $callback = sub {
my $done = shift;
if($done->exit_status != 0){
# make "recv" die with error message
$result_ready->croak(
"Process exited unsuccessfully with exit code: ". $done->exit_value
),
}
else {
# send captured output
$result_ready->send(
$done->delegate('stdout_capture')->output,
);
}
};
my $proc = _build_input_capture_job(
$callback, $cmd,
);
$proc->run;
return $result_ready;
}
1;
( run in 1.880 second using v1.01-cache-2.11-cpan-39bf76dae61 )