我有一个Perl脚本,必须包装一个产生大量输出的PHP脚本,并且运行大约需要半个小时.
我正在炮轰:
print `$command`;
Run Code Online (Sandbox Code Playgroud)
这就是调用PHP脚本的意义上的工作,它完成了它的工作,但是,在PHP脚本完成半小时后,Perl没有输出.
有没有一种方法可以解决,以便PHP收到它后立即打印出来的输出?
问题是Perl在PHP脚本终止之前不会完成读取,只有当它完成读取时才会写入.反引号操作符阻塞,直到子进程退出,并且隐式地进行读/写循环没有魔力.
所以你需要写一个.尝试用管道打开:
open my $fh, '-|', $command or die 'Unable to open';
while (<$fh>) {
print;
}
close $fh;
Run Code Online (Sandbox Code Playgroud)
这应该在PHP脚本写入时读取每一行,并立即输出.如果PHP脚本没有以方便的行输出并且您想要使用单个字符进行输出,则需要考虑使用read从文件句柄中获取数据,并$| = 1在stdout上禁用输出缓冲()以进行编写.
另见http://perldoc.perl.org/perlipc.html#Using-open()-for-IPC