mond-tech [perl]AnyEvent::Util::run_cmd - コマンド実行する時とても便利 忍者ブログ
焼肉屋さんが大好きです。いや、そうでも無い。 たぷたぷになってきてピンチです。
06
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

コマンドを実行して、標準入力、標準エラー、標準出力などをそれぞれ扱いたい場合に非常に便利な関数。
コマンドを開いてごにょごにょしたい時に必要なものが全て揃ってる。

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
お名前
タイトル
文字色
URL
コメント
パスワード
Vodafone絵文字 i-mode絵文字 Ezweb絵文字
Trackback URL
Copyright c mond-tech All Rights Reserved
忍者ブログ / [PR]
にほんブログ村 IT技術ブログ Webサイト構築へ