Perl:将子标准输出管道传输到父进程
Perl: Piping child stdout to parent process
在 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 日志。它似乎只是挂起。给出了什么?
这是缓冲问题。我需要将 -U
标志添加到 tcpdump
。这会导致数据包一收到就被写入。
在 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 日志。它似乎只是挂起。给出了什么?
这是缓冲问题。我需要将 -U
标志添加到 tcpdump
。这会导致数据包一收到就被写入。