gpt4 book ai didi

perl - 当 Perl 管道可用时,如何从它获取输出?

转载 作者:行者123 更新时间:2023-12-04 10:31:49 25 4
gpt4 key购买 nike

以下代码工作正常:

open( PIPE, '-|', 'ant' );
for( <PIPE> ) {
print;
}

但是,它没有做我想要的。由于 Ant 构建可能需要 5 分钟,我想逐行查看输出。
相反,我在流程结束时获得了整个输入。

用 Perl 调试器查看它,Perl 等待 'for' 语句,直到 Ant 终止。这是为什么?

最佳答案

只是为了完整性(问题已解决,正如对 Uri 答案的评论中所指出的那样)问题的出现是因为 for表达式计算 <>列表上下文中的运算符 ( see ),等效于以下内容:

foreach $line (@lines = <PIPE>) {
print $line;
}

在列表上下文中, <>运算符尝试从其输入读取所有行以分配给列表 - 输入来自进程,它将阻塞直到进程结束。只有在之后它才会进入循环体。

替代语法
while( <PIPE> ) {           
print;
}

相当于
while(  $line = <PIPE> ) {
print $line;
}

即,它在每次循环迭代中消耗来自输入的每一行,这就是在这种情况下想要做的。

关于perl - 当 Perl 管道可用时,如何从它获取输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2893377/

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