我不确定为什么您在问题中添加了以下部分:
当我尝试向sigint_handler添加另一个参数时,我遇到了错误。
但我会先解决这个问题:
使用一个 wrapper
或 partial
(它是一个包装器工厂),像这样:
>>> def my_wrapped_sigint_handler(my_argument):
... def signal_handler(signum, frame):
... print(my_argument)
... return signal_handler
...
>>> signal.signal(signal.SIGINT, my_wrapped_sigint_handler('FOO'))
或者使用partial:
>>> from functools import partial
>>> def sigint_handler(signum, frame, my_argument):
... print(my_argument)
...
>>> signal.signal(signal.SIGINT, partial(sigint_handler, my_argument="foobar"))
为了使用上述技术回答您最初的问题:
>>> class MyObject:
... def terminate (self):
... do_something()
...
>>> def sigint_handler(signum, frame, obj):
... obj.terminate()
...
>>> signal.signal(signal.SIGINT, partial(sigint_handler, obj=MyObject()))
在按下^C
时,会调用MyObject
实例的.terminate()
方法。