在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日志。好像挂了。有什么作用?
答案 0 :(得分:2)
它正在缓冲问题。我需要将-U
标志添加到tcpdump
。这将导致在收到数据包后立即对其进行写入。