2013-03-27 49 views
1

需要运行和外部命令,输出写入任何帮助apreciated一个日志文件,并捕获退出状态的Perl - 捕获退出状态和捕获记录最好的办法对外部命令

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"; 

+1

您可能想看看IPC :: Run或IPC :: Open3 – kjprice 2013-03-27 21:29:32

+0

任何原因,特别是您为什么不想使用DBI和DBD :: DB2? – 2013-03-29 14:42:08

回答

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)); 
0

你可以使用捕捉::微型:

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"; 

请参阅“perldoc -f系统“用于解释”$ exit >> 8“。