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

keyboard.is_pressed()运行异常 按下esc键无法终止循环问题求助

问题根因

  • 按键检测时机滞后:现有代码将keyboard.is_pressed("esc")的判断放在内层for循环执行完成之后,只有当你设定的n次消息全部发送完毕后,才会执行一次按键检测。如果n数值较大,两次检测的间隔会很长,按下esc时大概率不会被及时捕获,就会出现无响应的情况。
  • 代码语法错误:原代码第一行for循环后的if n == 0:语法格式错误,缩进逻辑也不符合Python规范,本身就无法正常执行。
  • 权限不足:keyboard库需要读取全局按键输入,Windows系统下需要以管理员权限运行脚本,macOS系统下需要为运行脚本的终端开启辅助功能权限,否则无法正常捕获按键操作。

修复方案

调整按键检测的位置到发送逻辑之后,每发送一条消息就检测一次按键,保证esc操作可以被及时响应,同时修正语法逻辑,满足不同n值的运行需求,修复后的代码如下:

import pyautogui
import keyboard
import time

# 此处替换为你自己的n、msg赋值逻辑
n = input("请输入发送次数(输入0则无限发送):")
msg = input("请输入要发送的内容:")
n = int(n)

if n == 0:
    # 无限发送模式,按esc终止
    while True:
        pyautogui.typewrite(msg + '\n')
        # 增加短延迟降低CPU占用,可根据需求调整
        time.sleep(0.01)
        if keyboard.is_pressed("esc"):
            print("已检测到esc按键,循环终止")
            break
else:
    # 固定次数发送模式,按esc可提前终止
    for i in range(n):
        pyautogui.typewrite(msg + '\n')
        time.sleep(0.01)
        if keyboard.is_pressed("esc"):
            print("已检测到esc按键,循环提前终止")
            break
  • 运行脚本前请确认权限:Windows系统右键点击脚本/终端,选择「以管理员身份运行」;macOS系统打开「系统设置-隐私与安全性-辅助功能」,勾选你运行脚本使用的终端工具。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 13:24:04