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

如何在激活其他窗口时通过按键随时终止Python运行中的循环

解决方案

问题原因

原代码依赖的KeyboardInterrupt中断信号仅能在Python进程对应的窗口(你的Jupyter Notebook窗口)处于激活状态时捕获,窗口失焦后按键信号无法传递到Python进程,因此无法中断循环。

实现方案

使用keyboard库实现全局按键监听,配合多线程分离自动按键逻辑和按键监听逻辑,无需激活代码运行窗口即可触发终止。

1. 安装依赖

执行以下命令安装全局键盘监听库:

pip install keyboard

2. 权限说明

该方案需要对应系统权限才能正常捕获全局按键:

  • Windows:以管理员身份运行Jupyter Notebook / 代码执行终端
  • macOS:在「系统设置-隐私与安全性-辅助功能」中为代码运行的终端/Jupyter应用授权
  • Linux:使用sudo权限运行代码

3. 改进后代码

import time
import pyautogui
import keyboard
import threading

# 退出事件标记,用于线程间通信
exit_event = threading.Event()

def kicker():
    while not exit_event.is_set():
        # 等待4秒,若期间触发退出信号则直接终止循环,无需等满4秒
        if exit_event.wait(4):
            break
        pyautogui.press('k')

if __name__ == "__main__":
    # 启动自动按键的后台线程
    kicker_thread = threading.Thread(target=kicker, daemon=True)
    kicker_thread.start()
    
    # 注册全局热键,按下q时触发退出,可自定义为其他组合键避免误触
    # 例如改为'ctrl+alt+x'可降低误触概率
    keyboard.add_hotkey('q', lambda: exit_event.set())
    
    # 阻塞等待退出信号
    exit_event.wait()
    # 清理监听钩子
    keyboard.unhook_all()
    print("程序已成功终止")

4. 自定义调整

如果需要修改终止热键,只需修改keyboard.add_hotkey()的第一个参数即可,支持组合键配置,例如'f12'、'ctrl+shift+k'等。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 18:36:03