我需要监控一个控制台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时,我在屏幕上看不到任何打印,有人能告诉我这可能是什么问题吗?
发布于 2010-08-08 13:21:45
我的问题可能是什么
据我所知,有三个可能的候选人:
my_program.exe已运行,但未生成outputmy_program.exe无法执行程序不在路径中,权限错误,不是可执行文件,等等。
StderrEvent可能是捕获这种情况的最简单的方法,因为子进程将对行缓冲的输出失败进行warn()
"print"状态处理程序发出不带换行符的输出,当刷新输出缓冲区时,可能直到perl终止时才会出现换行符。但是,在从会话的HEAP中删除{run}轮子之前,您的脚本不会终止,您可以(也应该)在sig_child处理程序中执行此操作。
https://stackoverflow.com/questions/3403851
复制相似问题