为何Python脚本无法停止,持续重复输入a和回车键?
问题分析与解决方案
核心问题
你的脚本无法停止的根本原因是内层while oliver循环一旦启动就会彻底卡死程序:
- 内层循环里只有
pyautogui.press操作,完全没有留出时间去检查键盘按键 - 外层的
santtu循环根本没机会继续运行,导致按"e"键触发oliver=False的逻辑永远不会被执行
你尝试的修改里,global oliver是多余的(当前代码无函数嵌套,变量本身就在全局作用域),而且quit()/exit()这些语句根本没机会被触发——内层循环已经把程序的执行权完全占住了。
修正方案
方案1:单循环+状态判断
把嵌套循环改成单循环,确保每次循环都能检查按键状态:
import keyboard import pyautogui running = False while True: # 检查启动/停止按键 if keyboard.is_pressed("s"): running = True elif keyboard.is_pressed("e"): running = False # 运行状态下执行输入 if running: pyautogui.press("a") pyautogui.press("Enter") pyautogui.sleep(1) # 控制输入间隔,同时给程序留时间响应按键 else: pyautogui.sleep(0.1) # 停止时降低CPU占用
方案2:热键绑定(更可靠)
用keyboard.add_hotkey直接绑定启动/停止逻辑,避免按键检测遗漏:
import keyboard import pyautogui import time running = False def toggle_running(): global running running = not running # 绑定s键切换运行状态,e键直接终止脚本 keyboard.add_hotkey("s", toggle_running) keyboard.add_hotkey("e", lambda: exit()) while True: if running: pyautogui.press("a") pyautogui.press("Enter") time.sleep(1) else: time.sleep(0.1)
关键修正点
- 移除嵌套循环,让程序每次循环都能处理键盘事件
- 加入休眠时间,既满足输入间隔要求,也避免程序占用过高CPU
- 热键绑定的方式比
is_pressed更稳定,能确保按键操作被及时响应
内容的提问来源于stack exchange,提问作者simpanssi
相关产品推荐
相关产品推荐

