コマンドを実行して、標準入力、標準エラー、標準出力などをそれぞれ扱いたい場合に非常に便利な関数。
コマンドを開いてごにょごにょしたい時に必要なものが全て揃ってる。
my $pid;
my $cv = run_cmd [qw(./test.pl)],
'<' => 'stdin.dat',
'>' => 'stdout.log',
'2>' => 'stderr.log',
on_prepare => sub {
print "[ON_PREPARE]\n";
},
'$$' => \$pid;
print "PROCESS_ID: $$\n";
print "SUB_PROCESS_ID: $pid\n";
print 'EXIT CODE: '. ($cv->recv >> 8) . "\n";
print 'EXIT SIGNAL: '. ($cv->recv & 127) . "\n";
なんとも簡単。
on_prepareは、コマンド実行前に叩かれる関数。
$$では、コマンド用のサブプロセスのIDが取れる。
$cv->recvで、コマンドの終了ステータス($?で取れるアレ)が取れる。
test.plはこんな感じ。
#!/usr/bin/perl
print "[STDOUT] HOGEHGOE\n";
print STDERR "[STDERR] FUGAFUGA\n";
while (<>) { print }
exit 1;
my $cv = run_cmd [qw(./test.pl)],
'<' => 'stdin.dat',
'>' => \my $stdout,
'2>' => \my $stderr,
'$$' => \$pid;
スカラーで受ける事も出来るよ。
PR