2013-05-16 3 views
0

클래스 변수에서 메서드를 호출하는 신호 처리기를 작성하려고합니다. 이 작동하지 않는어떻게 파이썬 데몬의 신호 처리기에서 클래스 메서드를 호출합니까?

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 예외가 발생합니다. 또한 예외 처리하고 신호 처리기에서 해당 함수를 호출 할 main 내부 함수를 정의하는 시도했다 그러나 그 중 하나를 작동하지 않았다.

아무도 구현 방법에 대한 아이디어가 있습니까?

답변

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() 

oparator 당신의 문자열 비교 한 번 봐 가지고 ' == 연산자 대신 '='연산자