python – Catch键盘正在等待事件的程序中断

前端之家收集整理的这篇文章主要介绍了python – Catch键盘正在等待事件的程序中断前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

以下程序挂起终端,使其忽略Ctrl C.这是相当烦人的,因为每次其中一个线程挂起时我必须重新启动终端.

有没有办法在等待事件时捕获KeyboardInterrupt?

import threading
def main():
    finished_event = threading.Event()
    startThread(finished_event)
    finished_event.wait()#I want to stop the program here
    print('done!')
def startThread(evt):
    """Start a thread that will trigger evt when it is done"""
    #evt.set()
if __name__ == '__main__':
    main()
最佳答案
更新:在当前的Python 3上,finished_event.wait()适用于我的Ubuntu机器(从Python 3.2开始).您不需要指定timeout参数,使用Ctrl C中断它.您需要在CPython 2上传递timeout参数.

这是一个完整的代码示例:

#!/usr/bin/env python3
import threading

def f(event):
    while True:
        pass
    # never reached,otherwise event.set() would be here

event = threading.Event()
threading.Thread(target=f,args=[event],daemon=True).start()
try:
    print('Press Ctrl+C to exit')
    event.wait()
except KeyboardInterrupt:
    print('got Ctrl+C')

可能有bugsCtrl+C相关.测试它是否适用于您的环境.

旧民意调查答案:

您可以尝试允许解释器运行主线程:

while not finished_event.wait(.1): # timeout in seconds
    pass

如果您只想等到子线程完成:

while thread.is_alive():
    thread.join(.1)

猜你在找的Python相关文章