Perl:将子标准输出管道传递到父进程

时间:2018-10-12 04:01:02

标签: perl http unix stdout

在Perl中,我可以打开一个子进程,并将其输出通过管道传递给调用Perl脚本,如下所示:

open(my $cmd, '-|', 'ls') or die $!;
while (<$cmd>) {
   print $_;
}

这会打印我工作文件夹中的文件,例如:

> foo.txt
> bar.txt
> ...

但是我想对保持开放状态的子进程做同样的事情,例如将tcpdump的stdout传递给Perl,我尝试执行类似的操作:

open(my $cmd, '-|', 'tcpdump') or die $!;
while (<$cmd>) {
   print $_;
}

...,但是除了tcpdump启动文本之外,这不会出现任何http日志。好像挂了。有什么作用?

1 个答案:

答案 0 :(得分:2)

它正在缓冲问题。我需要将-U标志添加到tcpdump。这将导致在收到数据包后立即对其进行写入。