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

