我需要监视一个控制台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时,我没有在屏幕上看到任何打印 有人可以告诉我这里可能出现什么问题。
答案 0 :(得分:1)
这可能是我的问题
据我所知,有三位候选人:
my_program.exe
已停止但未产生输出my_program.exe
无法执行
程序不在路径中,具有错误的权限,不是可执行文件等。StderrEvent
可能是最简单的方法,因为子进程warn()
将exec()
失败。"print"
状态处理程序在没有换行符的情况下发出输出,直到刷新输出缓冲区时才会出现perl终止。但是,在{run}
轮从会话的HEAP
中移除之前,您的脚本不会终止,您可以(并且应该)在sig_child
处理程序中执行此操作。