2015-09-30 23 views
0

我正在編寫一個主管事件監聽器,它可以將進程狀態事件發送到隊列中以供進一步處理。事件監聽器是用Python編寫的,我們稱之爲handler.py。我有一個Python內部構建和發佈系統,它讓我可以從任何使用無所不在的bash腳本(稱爲launcher.sh)我的服務器執行Python腳本之前創建虛擬環境,基本上是這樣的子shell中的主管eventlistener

... 
create virtualenv 
activate virtualenv 
python -m main_module 

我然後配置事件監聽器在我的上司情況下,像這樣:

[eventlistener:feedback] 
command = launcher.sh handler.py 
events=PROCESS_STATE 

我可以看到處理器打印READY \ n至它的標準輸出,但沒有任何事件的傳播下去,最後主管開始抱怨不得不事件緩衝區溢出。如果我然後改變事件監聽器配置來直接調用python,就像這樣,事情就會變成現實。

[eventlistener:feedback] 
command = <path to virtualenv>/bin/python handler.py 
events=PROCESS_STATE 

有一兩件事我想是使用EXEC蟒蛇內launcher.sh,我可以看到沒有子進程催生了這種方式,但它仍然無法正常工作打電話。我想知道這是否與緩衝stdout寫入或類似的東西有關,但我在這個深度的知識是有限的。將不勝感激任何幫助。

回答

0

要回答我自己的問題,通過閱讀主管代碼,事實證明它會檢查stdout_text.startswith('READY'),所以我只需確保我的launcher.sh腳本在啓動事件之前不打印任何內容處理程序。