1

外部コマンドを実行し、出力をログファイルに書き込み、終了ステータスをトラップする必要があります

my $cmd = "db2 \"insert into schema.tablea (id, name, city) values (99, 'Micheal', 'London')\" ";
open my $log, ">", "logfile.log";
my $rt = open(OUTPUT,"$cmd 2>&1 | " );
while (<OUTPUT>){
   chomp;
   print $log $_, "\n";
   print $_, "\n";
}
close(OUTPUT);
close($log);
print "Exit status is $rt\n";

どんな助けでも大歓迎です。

4

2 に答える 2

1

closeこの種のハンドルは、設定$?どおりに設定されsystemます。

die $! if $? == -1;
die "Killed by ".( $? & 0x7F ) if $? & 0x7F;
die "Exited with ".( $? >> 8 ) if $? >> 8;

とにかく砲撃するつもりなら、検討したほうがいいかもしれません

use String::ShellQuote qw( shell_quote );
system("$cmd 2>&1 | tee ".shell_quote($log));
于 2013-03-27T22:15:19.870 に答える
0

Capture::Tiny を使用できます:

    use Capture::Tiny ':all';
    use File::Slurp;
    use autodie;

    ($stdout, $stderr, $exit) = tee sub {
        system("echo hello; exit 15");
    };

    write_file('logfile.log', $stdout);
    print "exit: ", $exit >> 8, "\n";

「$exit >> 8」の説明については、「perldoc -f system」を参照してください。

于 2013-03-28T09:02:36.727 に答える