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 中定义处理异常并从信号处理程序调用这些函数的函数,但这也不起作用。

有人对如何实现这一点有想法吗?

4

2 回答 2

0

一种选择是在您的sigusr1_handler函数中导入类栏。无论如何,将它放在不同的文件中可能是个好主意

于 2013-05-16T12:28:57.890 回答
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()

我通常使用 '==' 运算符而不是 '='

于 2013-05-16T13:10:01.503 回答