python - Catch SIGINT and call a method in an object -
i know how capture sigint / sigterm signal in python, examples found primitive. need phone call specified method in object when sigint or sigterm occurs, there way how implement this?
def sigint_handler(signum, frame): print 'stop pressing ctrl+c!' signal.signal(signal.sigint, sigint_handler) class myobject: def terminate (self): do_something()
when seek add together argument sigint_handler
, error.
i'm not sure why added part
when seek add together argument sigint_handler, error.
to question, i'll first cover that:
use wrapper
or partial
(which wrapper-factory) so:
>>> def my_wrapped_sigint_handler(my_argument): ... def signal_handler(signum, frame): # actual sigint handler ... print(my_argument) # or useful ... homecoming signal_handler ... >>> signal.signal(signal.sigint, my_wrapped_sigint_handler('foo'))
or using partial:
>>> functools import partial >>> def sigint_handler(signum, frame, my_argument): ... print(my_argument) # or useful ... >>> signal.signal(signal.sigint, partial(sigint_handler, my_argument="foobar"))
to adress original question using technique above:
>>> class myobject: ... def terminate (self): ... do_something() ... >>> def sigint_handler(signum, frame, obj): ... obj.terminate() ... >>> signal.signal(signal.sigint, partial(sigint_handler, obj=myobject()))
will phone call myobject
's instance's .terminate()
on ^c
.
python methods call sigint
No comments:
Post a Comment