讓我詳細說明。如何實時讀取外部程序的標準輸出?
說我有perl程序
(界河是無恥地複製和perl的 http://perldoc.perl.org/perlfaq8.html#How-can-I-open-a-pipe-both-to-and-from-a-command%3f 編輯)
use IPC::Open3;
use Symbol qw(gensym);
use IO::File;
local *CATCHOUT = IO::File->new_tmpfile;
local *CATCHERR = IO::File->new_tmpfile;
my $pid = open3(gensym, ">&CATCHOUT", ">&CATCHERR", "ping -t localhost");
#waitpid($pid, 0);
seek $_, 0, 0 for \*CATCHOUT, \*CATCHERR;
while(<CATCHOUT>) {
print $_;
}
但上述方案的問題是,它會以一種ReadToEnd的的()在這種情況下屬於程序ping.exe的STDOUT的一部分,並允許它一次全部讀取。
但是我想要做的就是在STDOUT被寫出到標準輸出時讀取標準輸出。
如果我刪除了waitforpid(),那麼程序會立即退出,這樣也沒有幫助。
這可能嗎?如果是這樣,請你指點我正確的方向。
更新: Drats !!!!我錯過了|符號......這對於將輸出從ping輸入到perl腳本中是必不可少的!
謝謝更新我的問題..並接受+1 –