скрипт, но по-прежнему иметь возможность периодически читать из 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
В этом случае мы повторяем их просто ради этого вопроса, на самом деле мы хотим периодически анализировать определенные сообщения. и никогда не повторяйте ни одного из них.
Любое понимание приветствуется,
-Сэм