监视exe应用程序启动

时间:2010-08-04 08:35:27

标签: perl poe

我需要监视一个控制台exe应用程序,它没有来自用户的任何标准输入它只打印一些信息到我使用POE的轮子:轮子执行此任务

以下是我的代码:

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(  );

当我运行上面的代码/脚本并运行my_program.exe时,我没有在屏幕上看到任何打印 有人可以告诉我这里可能出现什么问题。

1 个答案:

答案 0 :(得分:1)

  

这可能是我的问题

据我所知,有三位候选人:

  1. my_program.exe已停止但未产生输出
  2. my_program.exe无法执行  程序不在路径中,具有错误的权限,不是可执行文件等。
     StderrEvent可能是最简单的方法,因为子进程warn()exec()失败。
  3. 您的输出是行缓冲的 "print"状态处理程序在没有换行符的情况下发出输出,直到刷新输出缓冲区时才会出现perl终止。但是,在{run}轮从会话的HEAP中移除之前,您的脚本不会终止,您可以(并且应该)在sig_child处理程序中执行此操作。