You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中使用keyboard.add_hotkey无法退出程序的问题求助

问题原因

keyboard库的热键回调函数是在独立线程中执行的,你用的quit()、exit()、sys.exit()这些方法只能终止当前的回调线程,而主线程还在运行for循环和time.sleep,所以程序会继续执行完整个循环才停止。

解决方案

方案一:强制终止整个进程(最直接)

使用os._exit()方法,它会直接终止整个Python进程,不管其他线程的状态,按下热键后立刻退出程序。

修改后的代码:

import time
import keyboard as kb
import os

def on_hotkey():
    print('hotkey')
    os._exit(0)  # 0表示正常退出,非0值可用于标记错误退出

kb.add_hotkey('ctrl + q', on_hotkey )
for i in range(3):
    print('Hello')
    time.sleep(5)

方案二:用标志优雅退出(推荐)

设置一个全局退出标志,让主线程在循环中定期检查标志,这样可以避免强制终止进程,让程序更优雅地结束。

因为time.sleep(5)会让主线程阻塞5秒,这段时间无法响应标志,所以把长睡眠拆分成多个短睡眠,每0.1秒检查一次标志:

import time
import keyboard as kb

exit_flag = False

def on_hotkey():
    global exit_flag
    print('hotkey')
    exit_flag = True

kb.add_hotkey('ctrl + q', on_hotkey )
for i in range(3):
    if exit_flag:
        break
    print('Hello')
    # 拆分长sleep,每隔0.1秒检查一次退出标志
    for _ in range(50):
        if exit_flag:
            break
        time.sleep(0.1)

内容的提问来源于stack exchange,提问作者elscan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 13:00:02