【问题标题】:Perl: Piping child stdout to parent processPerl:将子标准输出管道传输到父进程
【发布时间】:2019-03-17 05:53:15
【问题描述】:

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

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

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

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

但是我想对一个保持打开状态的子进程做同样的事情,例如将tcpdump 的标准输出通过管道传输到 Perl,我尝试了类似的操作:

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

...但除了tcpdump 启动文本之外,这不会产生任何http 日志。它似乎只是挂起。什么给了?

【问题讨论】:

  • 缓冲问题?

标签: perl http unix stdout


【解决方案1】:

这是缓冲问题。我需要将-U 标志添加到tcpdump。这会导致数据包在收到后立即写入。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-18
    • 2013-07-16
    • 1970-01-01
    • 2013-06-25
    • 2013-08-20
    • 1970-01-01
    相关资源
    最近更新 更多