CI: Improve method of capturing output
This commit is contained in:
parent
d13f8ff83c
commit
76da187807
|
@ -12,6 +12,8 @@ use File::Basename qw/
|
||||||
dirname
|
dirname
|
||||||
/;
|
/;
|
||||||
require File::Temp;
|
require File::Temp;
|
||||||
|
use IPC::Open3 qw/ open3 /;
|
||||||
|
use Symbol qw/ gensym /;
|
||||||
|
|
||||||
use Exporter;
|
use Exporter;
|
||||||
use parent 'Exporter';
|
use parent 'Exporter';
|
||||||
|
@ -102,7 +104,6 @@ sub run_script_capture {
|
||||||
my @args = @_;
|
my @args = @_;
|
||||||
my @cmd = (SCRIPT, @args);
|
my @cmd = (SCRIPT, @args);
|
||||||
|
|
||||||
use IPC::Open3 qw/ open3 /;
|
|
||||||
my $stderr = File::Temp->new(
|
my $stderr = File::Temp->new(
|
||||||
TMPDIR => 1,
|
TMPDIR => 1,
|
||||||
CLEANUP => 1,
|
CLEANUP => 1,
|
||||||
|
@ -112,20 +113,20 @@ sub run_script_capture {
|
||||||
CLEANUP => 1,
|
CLEANUP => 1,
|
||||||
);
|
);
|
||||||
my $in = '';
|
my $in = '';
|
||||||
local *CATCHOUT = $stdout;
|
my $child_out = gensym();
|
||||||
local *CATCHERR = $stderr;
|
my $child_err = gensym();
|
||||||
print STDERR "+ @cmd\n";
|
print STDERR "+ @cmd\n";
|
||||||
my $pid = open3 $in, '>&CATCHOUT', '>&CATCHERR', @cmd;
|
my $pid = open3 $in, $child_out, $child_err, @cmd;
|
||||||
waitpid $pid, 0;
|
waitpid $pid, 0;
|
||||||
foreach my $handle (\*CATCHOUT, \*CATCHERR) {
|
foreach my $handle ($child_out, $child_err) {
|
||||||
seek $handle, 0, 0;
|
seek $handle, 0, 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
local $/;
|
local $/;
|
||||||
return (
|
return (
|
||||||
$?,
|
$?,
|
||||||
scalar <CATCHOUT>, # slurp!
|
scalar <$child_out>, # slurp!
|
||||||
scalar <CATCHERR>, # slurp!
|
scalar <$child_err>, # slurp!
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue