Perl: передача дочернего stdout в родительский процесс - PullRequest
0 голосов
/ 12 октября 2018

В 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-логи.Кажется, это просто зависает.Что дает?

1 Ответ

0 голосов
/ 12 октября 2018

Это были проблемы с буферизацией.Мне нужно было добавить флаг -U к tcpdump.Это приводит к тому, что пакеты записываются сразу после их получения.

...