2

我需要监视一个没有来自用户的任何标准输入的控制台 exe 应用程序,它只在屏幕上打印一些信息我使用了 POE:Wheel 来完成这项任务

以下是我的代码:

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 时,我没有在屏幕上看到任何打印,有人可以告诉我这里可能是什么问题。

4

1 回答 1

1

我的问题可能在这里

据我所知,三个可能的候选人:

  1. my_program.exe运行但没有输出
  2. my_program.exe无法执行
    该程序不在路径中,具有错误的权限,不是可执行文件等。
    AStderrEvent可能是捕获此问题的最简单方法,因为子进程将warn()失败exec()
  3. 您的输出是行缓冲状态处理程序发出
    "print"输出没有换行符,直到刷新输出缓冲区时 perl 终止时才会出现。但是,您的脚本不会终止,直到{run}从会话中移除轮子HEAP,您可以(并且应该)在sig_child处理程序中执行此操作。
于 2010-08-08T05:21:44.683 回答