my $output;
my $outfunc;
my $errfunc;
+ my $logfunc;
foreach my $p (keys %param) {
if ($p eq 'timeout') {
$outfunc = $param{$p};
} elsif ($p eq 'errfunc') {
$errfunc = $param{$p};
+ } elsif ($p eq 'logfunc') {
+ $logfunc = $param{$p};
} else {
die "got unknown parameter '$p' for run_command\n";
}
}
$select->remove ($h) if !$count;
if ($h eq $reader) {
- if ($outfunc) {
+ if ($outfunc || $logfunc) {
eval {
$outlog .= $buf;
while ($outlog =~ s/^([^\010\r\n]*)(\r|\n|(\010)+|\r\n)//s) {
my $line = $1;
- &$outfunc($line);
+ &$outfunc($line) if $outfunc;
+ &$logfunc($line) if $logfunc;
}
};
my $err = $@;
*STDOUT->flush();
}
} elsif ($h eq $error) {
- if ($errfunc) {
+ if ($errfunc || $logfunc) {
eval {
$errlog .= $buf;
while ($errlog =~ s/^([^\010\r\n]*)(\r|\n|(\010)+|\r\n)//s) {
my $line = $1;
- &$errfunc($line);
+ &$errfunc($line) if $errfunc;
+ &$logfunc($line) if $logfunc;
}
};
my $err = $@;
}
&$outfunc($outlog) if $outfunc && $outlog;
+ &$logfunc($outlog) if $logfunc && $outlog;
+
&$errfunc($errlog) if $errfunc && $errlog;
+ &$logfunc($errlog) if $logfunc && $errlog;
waitpid ($pid, 0);