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

Python宏触发无限循环求助:输入medo1后脚本异常自行输入

脚本问题修复方案

问题根源

  1. 无限循环:pyautogui模拟输入的按键会被pynput的Listener捕获,反复触发on_press函数,形成死循环。
  2. last5状态混乱:模拟输入的按键会覆盖手动重置的last5值,导致变量无法按预期修改。
  3. 误触发与无效按键处理:未过滤Shift、Enter等非打印字符,且匹配逻辑(d in m)容易触发误操作。

修复后的完整代码

from pynput.keyboard import Key, Listener
import pyautogui as pa
import time as t

musics = ['medo1=link1', 'medo2=link2', 'medo3=link3', 'medo4=link4', 'medo5=link5']
last5 = ['a', 'a', 'a', 'a', 'a']
is_simulating = False  # 标记是否处于模拟输入阶段

def on_press(key):
    global last5, is_simulating
    
    # 模拟输入时跳过按键监听,避免循环触发
    if is_simulating:
        return
    # 按ESC终止监听程序
    if key == Key.esc:
        return False

    d = ''.join(last5)
    try:
        # 仅处理可打印的字符按键
        if key.char is not None:
            last5.append(key.char)
            last5.pop(0)
            d = ''.join(last5)
    except AttributeError:
        # 非字符按键(如Shift、Ctrl)直接跳过
        pass

    # 精确匹配触发词
    for m in musics:
        trigger_word = m.split('=')[0]
        if d == trigger_word:
            is_simulating = True
            # 删除输入的触发词(长度等于触发词字符数)
            pa.press('backspace', presses=len(trigger_word))
            # 执行预设输入操作
            pa.typewrite(f'b.p {m.split("=")[1]}')
            t.sleep(0.03)
            pa.press("enter")
            pa.typewrite('b.loop all')
            t.sleep(0.1)
            pa.press("enter")
            # 重置last5,避免后续误触发
            last5 = ['a', 'a', 'a', 'a', 'a']
            is_simulating = False
            break

with Listener(on_press=on_press) as listener:
    listener.join()

核心修复说明

  • 模拟输入隔离:新增is_simulating标记,当脚本自动输入内容时,暂停按键监听,彻底切断循环触发的链路。
  • 精确匹配逻辑:将模糊匹配d in m改为完全匹配触发词d == trigger_word,避免因部分字符重叠导致的误操作。
  • 合理清理输入:把固定99次backspace改为按触发词长度删除,避免误删其他内容。
  • 有效按键过滤:只处理带有效char的按键,忽略Shift、Enter等非打印按键,保证last5的更新逻辑稳定。
  • 正确退出机制:修改ESC按键的返回值为False,确保能正常终止Listener程序。

内容的提问来源于stack exchange,提问作者Mateus Bermudes Magalhães

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 03:48:21