Мы пытаемся выяснить, как запустить java-приложение из 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, каждые несколько минут или, возможно, путем установки триггера 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, отправляет сообщения msg .:
running dcmrcv.bat
dcmrcv.bat started
Сообщения.из java-программы: Запустите прослушивание сервера на порту 11112 11: 55: 13,495 INFO - Начните прослушивание на 0.0.0.0/0.0.0.0:11112
В этом случае мы выводим эти сообщения только радиэтого вопроса, на самом деле мы хотим периодически анализировать определенные сообщения.и никогда не повторяйте ни одного из них.
Любое понимание приветствуется,
-Sam