2010-08-04 118 views
2

我需要監控那些沒有從用戶的任何標準輸入一個控制檯EXE應用程序,只打印了一些信息,以我使用的POE屏幕:輪式此任務監控EXE應用程序啓動

下面是我的代碼:

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

什麼可能是我的問題就在這裏

三種可能的候選人,據我看到:

  1. my_program.exe運行,但沒有產生輸出
  2. my_program.exe無法執行
    的程序不在路徑中,具有錯誤的權限,不是可執行文件等。
    A StderrEvent也許是最簡單的方法來捕捉這個,因爲子進程將warn()關於失敗exec()
  3. 您的輸出是行緩衝
    "print"狀態處理程序發出沒有換行符的輸出,直到刷新輸出緩衝區時纔會出現,直到perl終止。但是,您的腳本不會終止,直到從會話的HEAP中刪除{run}轉輪,您可以(也應該)在sig_child處理程序中執行此轉輪。