加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

发布时间:2020-12-16 21:56:07 所属栏目:Python 来源:网络整理
导读:以下程序挂起终端,使其忽略Ctrl C.这是相当烦人的,因为每次其中一个线程挂起时我必须重新启动终端. 有没有办法在等待事件时捕获KeyboardInterrupt? import threadingdef main(): finished_event = threading.Event() startThread(finished_event) finished_

以下程序挂起终端,使其忽略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')

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

旧民意调查答案:

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

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读