Как просмотреть STDOUT работающей программы из программы Perl, которая ее вызвала?

скрипт, но по-прежнему иметь возможность периодически читать из STDOUT приложения Java.

print "running dcmrcv.bat\n";

open my $fh_dcmrcv, "-|", 'z:\apps\dcm4che\dcm4che-2.0.26\bin\dcmrcv.bat \
  DCMRCV:11112 -dest z:\dcmrcv -journal z:\dcmrcv', 
  or die "could not execute dcmrcv: $!";

print "dcmrcv.bat started\n";

Мы хотели иметь возможность читать из дескриптора файла, $fh_dmcrcv, каждые несколько минут. tes или, возможно, настроив триггер AnyEvent io, когда есть активность в дескрипторе файла.

Однако, когда я пытаюсь читать из дескриптора файла, он блокируется, если я использую что-то вроде этого:

foreach my $line (<$fh_dmcrcv>) {
  print $line;
}

Мы испробовали несколько подходов, не думаю, что мы можем использовать File::Tail, так как кажется, что модуль нужен настоящий файл. Проблема, похоже, в том, что $fh_dcmrcv блокирует нас, когда мы читаем из него, не совсем уверенный в правильном подходе к тому, как достичь того, что мы хотим.

РЕДАКТИРОВАТЬ #1

Когда мы запускаем наш perl-скрипт, мы видим следующий вывод:

Z:\projects\demo_2>process_files.pl
running dcmrcv.bat
dcmrcv.bat started
Start Server listening on port 11112
11:55:13,495 INFO   - Start listening on 0.0.0.0/0.0.0.0:11112

Скрипт, process_files.pl, выдает msgs.:

running dcmrcv.bat
dcmrcv.bat started

The msgs. из java-программы: Запустить сервер, прослушивающий порт 11112 11:55:13,495 ИНФОРМАЦИЯ - Начать прослушивание 0.0.0.0/0.0.0.0:11112

В этом случае мы повторяем их просто ради этого вопроса, на самом деле мы хотим периодически анализировать определенные сообщения. и никогда не повторяйте ни одного из них.

Любое понимание приветствуется,

-Сэм

6
задан slm 9 February 2012 в 17:48
поделиться