gpt4 book ai didi

Perl - 从外部进程直接输出到标准输出(避免缓冲)

转载 作者:行者123 更新时间:2023-12-05 00:33:20 27 4
gpt4 key购买 nike

我有一个 Perl 脚本,它必须包装一个产生大量输出的 PHP 脚本,并且需要大约半小时才能运行。

此刻我正在掏腰包:

print `$command`;

在调用 PHP 脚本的意义上这是有效的,它完成了它的工作,但是,直到 PHP 脚本在半小时后完成,Perl 才呈现任何输出。

有没有一种方法可以让 Perl 在接收到 PHP 的输出后立即将其打印出来?

最佳答案

问题是 Perl 不会在 PHP 脚本终止之前完成读取,只有当它完成读取时才会写入。反引号运算符会阻塞,直到子进程退出,并且没有什么魔法可以隐式地进行读/写循环。

所以你需要写一个。尝试管道打开:

open my $fh, '-|', $command or die 'Unable to open';
while (<$fh>) {
print;
}
close $fh;

这会在 PHP 脚本写入时读取每一行,并立即输出。如果 PHP 脚本没有以方便的行输出,而您想用单个字符来输出,则需要考虑使用 read 从文件句柄中获取数据,并禁用输出缓冲 ( $| = 1) 在 stdout 上写入它。

另见 http://perldoc.perl.org/perlipc.html#Using-open()-for-IPC

关于Perl - 从外部进程直接输出到标准输出(避免缓冲),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11456121/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com