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

Python中Pynput与time模块循环协同异常问题求助

问题解决:Pynput循环中Sleep被忽略导致输入未完成就发送

针对你在M1 MacBook Pro的VS Code中运行Pynput投票脚本时,后续循环里keyboard.type和keyboard.press(Key.enter)之间的time.sleep(5)被忽略的问题,给你几个实际可行的解决办法:

1. 替换keyboard.press为keyboard.tap并确保按键释放

很多时候只调用press而没调用release会导致系统键盘事件队列混乱,后续的sleep和按键操作被干扰。直接用tap可以自动完成按下+释放的操作:

from pynput.keyboard import Controller, Key
import time

keyboard = Controller()

for _ in range(10):
    keyboard.type("投票内容")
    time.sleep(5)  # 这里的等待会被正确执行
    keyboard.tap(Key.enter)  # 自动完成按下和释放回车
    time.sleep(2)  # 给系统留处理时间,避免过快进入下一轮

2. 拆分keyboard.type为逐个字符输入,增加短延迟

M1芯片的系统对批量字符输入的处理可能和Intel不同,拆分输入可以确保每个字符都被系统正确接收:

from pynput.keyboard import Controller, Key
import time

keyboard = Controller()
vote_text = "投票内容"

for _ in range(10):
    # 逐个输入字符,每个字符后加短延迟
    for char in vote_text:
        keyboard.type(char)
        time.sleep(0.1)
    time.sleep(5)  # 等待输入完成后的延迟
    keyboard.tap(Key.enter)
    time.sleep(2)

3. 脱离VS Code终端,直接在系统Terminal运行脚本

VS Code的集成终端可能和M1的Rosetta或原生环境存在兼容性问题,尝试:

  • 打开Mac自带的「终端」应用
  • 切换到脚本所在目录,运行python3 your_script.py
  • 观察sleep是否正常生效

4. 改用pyautogui替代Pynput(备选方案)

如果Pynput的兼容性问题无法解决,pyautogui对Mac的支持更稳定,同样可以实现需求:

import pyautogui
import time

for _ in range(10):
    pyautogui.typewrite("投票内容")
    time.sleep(5)
    pyautogui.press("enter")
    time.sleep(2)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 05:17:42