X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FSystem%2FIntrospector%2FUtil.pm;h=530f9f90e53ad5669d64f4923230492b424cae0d;hb=1b608727eb3a7c5c9b54193d1b537aa51dbf8352;hp=98d2429add816d494d4f5c00e5e73bca4568ada9;hpb=9c3e454c89f701b573ced38188039aba920a8aef;p=scpubgit%2FSystem-Introspector.git diff --git a/lib/System/Introspector/Util.pm b/lib/System/Introspector/Util.pm index 98d2429..530f9f9 100644 --- a/lib/System/Introspector/Util.pm +++ b/lib/System/Introspector/Util.pm @@ -6,6 +6,7 @@ use IPC::Run qw( run ); use IPC::Open2; use File::Spec; use Scalar::Util qw( blessed ); +use Capture::Tiny qw( capture_stderr ); our @EXPORT_OK = qw( handle_from_command @@ -43,7 +44,7 @@ sub transform_exceptions (&) { my ($code) = @_; my $result = eval { $code->() }; if (my $error = $@) { - return { error => $error->message } + return { __error__ => $error->message } if is_report_exception $error; die $@; } @@ -78,11 +79,20 @@ sub handle_from_command { local $@; my $ok = eval { my $out; - my $child_pid = open2($out, File::Spec->devnull, $command); - my @lines = <$out>; - waitpid $child_pid, 0; + my $child_pid; + my @lines; + my ($err) = capture_stderr { + $child_pid = open2($out, File::Spec->devnull, $command); + @lines = <$out>; + close $out; + waitpid $child_pid, 0; + }; my $content = join '', @lines; my $status = $? >> 8; + $err = "Unknown error" + unless defined $err; + fail "Command error ($command): $err\n" + if $status; open $pipe, '<', \$content; 1; };