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
相关产品推荐
相关产品推荐

