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

如何停止/解绑pynput监听器?快捷键退出程序失效问题解决

修复翻译器快捷键退出无效的问题

问题出在exit()无法正确终止主线程——因为listener.join()会阻塞主线程,而on_exit_hotkey是在监听器的子线程中执行的,内置的exit()只会终止当前子线程,主线程仍会卡在join()处。

修复方案

改用sys.exit()替代exit(),它会向主线程抛出SystemExit异常,打破join()的阻塞状态,让程序正常退出。同时建议加入异常捕获,处理手动中断的情况。

修改后的完整代码:

import sys
import keyboard

def on_translate_hotkey():
    # 此处替换为你的翻译逻辑
    print("已触发翻译")

def on_exit_hotkey():
    listener.stop()
    sys.exit()

print('\n-- 按下 CTRL+T 触发翻译')
print('-- 按下 SHIFT+ESC 退出程序\n')

listener = keyboard.GlobalHotKeys({'<ctrl>+t': on_translate_hotkey, '<shift>+<esc>': on_exit_hotkey})
listener.start()

try:
    listener.join()
except KeyboardInterrupt:
    listener.stop()

另一种可选方案

如果不想依赖join()的阻塞,也可以用循环保持主线程活跃,避免子线程退出后主线程仍卡住:

import sys
import keyboard
import time

def on_translate_hotkey():
    print("已触发翻译")

def on_exit_hotkey():
    listener.stop()
    sys.exit()

print('\n-- 按下 CTRL+T 触发翻译')
print('-- 按下 SHIFT+ESC 退出程序\n')

listener = keyboard.GlobalHotKeys({'<ctrl>+t': on_translate_hotkey, '<shift>+<esc>': on_exit_hotkey})
listener.start()

while True:
    try:
        time.sleep(0.5)  # 短暂休眠降低CPU占用
    except KeyboardInterrupt:
        listener.stop()
        break

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 05:42:40