2013-05-16 43 views
0

我想寫一個信號處理程序,它將從類變量中調用方法。如何在Python守護進程中的信號處理程序中調用類方法?

我的代碼看起來像這樣:

import daemon 
class bar(): 
    def func(): 
     print "Hello World!\n" 

def sigusr1_handler(signum,frame): 
    foo.func() 

def main(): 
    foo = bar() 

context = daemon.DaemonContext(stdout=sys.stdout) 
context.signal_map = { 
    signal.SIGUSR1: sigusr1_handler 
} 

with context: 
    if (__name__="__main__"): 
     main() 

這是行不通的。當我在守護進程上執行kill -USR1時,Python會引發NameError異常。 我也嘗試過在主要內部定義處理異常的函數,並從信號處理程序中調用這些函數,但那也不起作用。

任何人都有如何實現這個想法?

回答

0

一種選擇是在sigusr1_handler函數中導入類欄。這可能是一個好主意,無論如何,它在一個不同的文件

0

你進口信號?因爲如果我跑你的代碼我得到:

Traceback (most recent call last): 
    File "pydaemon.py", line 16, in <module> 
    signal.SIGUSR1: sigusr1_handler 
NameError: name 'signal' is not defined 

您可能會解決這個問題:

import signal 

,看一看你的字符串比較算符

with context: 
    if (__name__="__main__"): 
     main() 

我通常使用' =='操作符而不是'='