펄 -

2013-03-27 4 views
1

실행하고 외부 명령, 어떤 도움이 apreciated되는 로그 파일 및 트랩 출구 상태펄 -

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

당신은 당신이 DBI와 DBD :: DB2를 사용하지 않는 이유 IPC :: 실행 또는 IPC :: 특히 된 Open3 – kjprice

+0

어떤 이유에서 살펴 봐야 할 것인가? –

답변

1

close$?system으로 설정합니다.

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 시스템 : 어쨌든 좀 바꿔 위하여려고하는 경우에

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

당신은 캡처 :: 작은 사용할 수 있습니다 고려해 볼 수 있습니다 ""$ exit >> 8 "에 대한 설명이 필요합니다.