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

