作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在 try catch 信号并将变量传递给退出处理程序。
我现在使用的Python3信号处理signal.signal(signal.SIGINT, exit_handler)
无法传递变量。
这是我的代码:
import signal
def main(driver):
""
# somecode
def exit_handler(sig, frame):
driver.quit()
db.update
# etc
exit()
if __name__ == '__main__':
driver = ""
database = ""
signal.signal(signal.SIGINT, exit_handler) # pass variable to exit_handler
exit()
如何实现这一目标?
最佳答案
Handler 需要是一个可调用对象,在调用时需要两个参数(信号号和当前堆栈帧)。您可以编写自己的对象并通过定义 __call__
使其可调用方法,其构造函数接受一个或多个参数,您可以保留这些参数以供稍后调用时使用。例如:
import signal
import time
def main():
while True:
time.sleep(1)
class MyHandler:
def __init__(self, myvar):
self.myattr = myvar
def __call__(self, signo, frame):
print("My variable was:", self.myattr)
if __name__ == '__main__':
signal.signal(signal.SIGINT, MyHandler(123))
main()
如果需要,存储在处理程序实例中的值也可以在脚本的生命周期内更新,然后在调用时使用。
关于python - 如何在Python退出时捕获信号并传递变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52318231/
我是一名优秀的程序员,十分优秀!