Estamos tratando de averiguar cómo ejecutar una aplicación java desde un script de Perl, pero aún así poder leer periódicamente desde el STDOUT de la aplicación java.¿Cómo veo un STDOUT de un programa en ejecución de un programa perl que lo llamó?
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";
queríamos ser capaz de leer desde el gestor de archivo, $ fh_dmcrcv, cada pocos minutos o tal vez mediante la creación de un AnyEvent io gatillo cuando hay actividad en el gestor de archivo.
Sin embargo, cuando intento leer desde el gestor de archivo, se bloquea si uso algo como esto:
foreach my $line (<$fh_dmcrcv>) {
print $line;
}
Hemos intentado varios enfoques, no creo que podamos utilizar Archivo :: cola, ya que parece que el módulo necesita un archivo real. El problema parece ser que $ fh_dcmrcv nos bloquea cuando leemos, no estamos seguros del enfoque correcto sobre cómo lograr lo que queremos.
editar # salida 1
Cuando ejecutamos nuestro script Perl que estamos viendo como esto:
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
El guión, process_files.pl está emitiendo los mens .:
running dcmrcv.bat
dcmrcv.bat started
Los mensajes. desde el programa Java son: Iniciar servidor escucha en el puerto 11112 11: 55: 13.495 INFO - empezar a escuchar en 0.0.0.0/0.0.0.0:11112
En este caso estamos haciendo eco de aquellos que por el simple hecho de esta pregunta, realmente queremos analizar periódicamente ciertos mensajes. y nunca hacer eco de ninguno de ellos.
Cualquier idea es apreciado,
-Sam
¿Puedes escribir la salida de la aplicación en un archivo (temporal) y luego usar 'File :: Tail'? – mob
Estamos tratando de evitar ese enfoque. No queremos tener que administrar este archivo en términos de tener que rotarlo o recortarlo. – slm
¿Ha intentado usar fctrl para establecer el descriptor en O_NONBLOCK? – frankc