Tuesday 15 April 2014

python - Catch SIGINT and call a method in an object -



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