让我详细说明。
说我有 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 $_;
}
但上述程序的问题在于,在这种情况下,它会读取属于程序 ping.exe 的 STDOUT 的一种 readtoEnd(),并允许一次读取所有内容。
但是我想要做的是在将 STDOUT 写入 STDOUT 时读取它。
如果我删除 waitforpid() 那么程序会立即退出,所以这也无济于事。
那可能吗 ?如果是这样,请您指出正确的方向。
更新:德拉斯!!!!我错过了| 符号...这对于将输出从 ping 输出到 perl 脚本至关重要!!!