2010-08-04 5 views
2

J'ai besoin de surveiller une application exe de la console qui ne dispose pas stdin de l'utilisateur seulement imprimer quelques informations à l'écran i utilisé un POE: roue pour cette tâchesurveillance une application exe lancement

Voici ma Code:

use POE qw(Wheel::Run); 

    POE::Session->create(
     inline_states => { 
     _start => sub { 
      my ($heap) = $_[HEAP]; 

      my $run = POE::Wheel::Run->new(
       Program  => "my_program.exe", 
       StdoutEvent => "print" 
      ); 


      $heap->{run} = $run ; 

     }, 

     print => sub {print "somthing";} 
     } 
    ); 
$poe_kernel->run(); 

Quand je lance le code/script ci-dessus et exécutez le my_program.exe i ne voyait pas d'impression sur l'écran quelqu'un pourrait dire ce qui pourrait être mon problème ici.

Répondre

1

Ce qui pourrait être mon problème ici

Trois candidats probables pour autant que je vois:

  1. my_program.exe couru mais produit pas de sortie
  2. my_program.exe n'a pas pu être exécuté
    Le programme n'est pas dans le chemin, a les mauvaises autorisations, n'est pas un exécutable, etc
    A StderrEvent est peut-être le moyen le plus facile d'attraper cela, car le processus enfant va warn() sur l'échec à exec().
  3. Votre sortie est mise en mémoire tampon
    Le gestionnaire d'état "print" émet une sortie sans retour à la ligne, qui peut ne pas apparaître avant la fin de perl lorsque les tampons de sortie sont vidés. Cependant, votre script ne se terminera pas avant que la roue {run} ne soit retirée du HEAP de la session, ce que vous pouvez (et devriez) faire dans un gestionnaire sig_child.
Questions connexes