我需要使用ctrl c来中断time.sleep()。
While 1:
time.sleep(60)
在上面的代码中,当控件进入time.sleep函数时,python需要整整60秒来处理CTRL C
有什么优雅的方法可以做到这一点吗?这样,即使控件处于time.sleep函数中,我也可以中断
编辑
我是在一个遗留的实现上测试它的,它在windows2000上使用python2.2,这造成了所有的麻烦。如果我使用的是更高版本的python,CTRL就会中断sleep()。我通过在for循环中调用sleep(1)进行了一次快速修改。它暂时解决了我的问题
发布于 2011-02-25 14:47:56
当用户按下中断键Ctrl-C时,会引发KeyboardInterrupt异常。在python中,这是从SIGINT信号转换而来的。这意味着,您可以使用信号模块随心所欲地处理它:
import signal
def handler(signum, frame):
print("do whatever, like call thread.interrupt_main()")
signal.signal(signal.SIGINT, handler)
print("Waiting for SIGINT...")
signal.pause()
这样,您就可以在收到键盘中断时做任何您想做的事情。
发布于 2011-02-25 15:08:57
我在Linux下用python2.5、2.6、3版本测试了你的代码,当按下CTRL-C时,所有代码都抛出了"KeyboardInterrupt“异常。
也许某个异常处理捕捉到了中断,或者您的问题是这样的:Why is KeyboardInterrupt not working in python?
发布于 2017-11-26 18:16:55
最优雅的解决方案当然是threading.Event
,不过如果你只需要快速修改一下,下面的代码就能很好地工作:
import time
def main():
print("It’s time !")
if __name__ == "__main__":
print("press ctrl-c to stop")
loop_forever = True
while loop_forever:
main()
try:
time.sleep(60)
except KeyboardInterrupt:
loop_forever = False
https://stackoverflow.com/questions/5114292
复制相似问题