S
stalex
Hi all,
I wrote the following code since I want to try using a decorator to
install signal handler:
## The test.py script
#################
import os
import time
import signal
def sigHandler(sid):
def handler(f):
signal.signal(sid, f)
return f
return handler
class Test(object):
@sigHandler(signal.SIGTERM)
def _sigHandler(self, signalId, currentFrame):
print "Received:", signalId
if __name__ == "__main__":
print "pid:", os.getpid()
t = Test()
time.sleep(300)
# From terminal, say A
####################
$ python test.py
pid: 1234
# From terminal, say B
###################
$ kill -TERM 1234
After issuing the kill command from terminal B, the process of test.py
from terminal A is terminated.
Python print out some exception message as following:
Traceback (most recent call last):
File "a.py", line 22, in <module>
time.sleep(300)
TypeError: _sigHandler() takes exactly 3 arguments (2 given)
At a guess, I think the decorator I defined did not pass the 'self' as
the first argument to _sigHandler() method, did it? And I have no idea
of how to write a correct one. Any suggestion?
I wrote the following code since I want to try using a decorator to
install signal handler:
## The test.py script
#################
import os
import time
import signal
def sigHandler(sid):
def handler(f):
signal.signal(sid, f)
return f
return handler
class Test(object):
@sigHandler(signal.SIGTERM)
def _sigHandler(self, signalId, currentFrame):
print "Received:", signalId
if __name__ == "__main__":
print "pid:", os.getpid()
t = Test()
time.sleep(300)
# From terminal, say A
####################
$ python test.py
pid: 1234
# From terminal, say B
###################
$ kill -TERM 1234
After issuing the kill command from terminal B, the process of test.py
from terminal A is terminated.
Python print out some exception message as following:
Traceback (most recent call last):
File "a.py", line 22, in <module>
time.sleep(300)
TypeError: _sigHandler() takes exactly 3 arguments (2 given)
At a guess, I think the decorator I defined did not pass the 'self' as
the first argument to _sigHandler() method, did it? And I have no idea
of how to write a correct one. Any suggestion?