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

Pynput keyboard.Listener启动后on_press/on_release函数未触发求助

问题分析与解决办法

针对你遇到的pynput.keyboard.Listener线程存活但回调函数不触发的问题,给你几个排查方向:

1. 权限不足

这是最常见的原因:

  • Windows:右键点击运行脚本的终端/IDE,选择「以管理员身份运行」后再执行脚本。
  • macOS:打开「系统设置」→「隐私与安全性」→「辅助功能」,找到你的终端或代码编辑器并勾选允许它控制电脑,设置后可能需要重启程序。
  • Linux:先安装依赖库sudo apt-get install libxtst-dev,再用sudo运行脚本避免权限限制。

2. 输出缓冲导致看不到结果

print()函数默认有缓冲,可能回调其实已经触发,但内容没立刻显示出来。修改回调函数强制刷新输出:

import pynput.keyboard as kb

def say(key):
    print(key, flush=True)  # 加上flush=True强制刷新输出

lis = kb.Listener(on_press=say, on_release=say)
lis.start()

while True:
    pass

3. 主线程阻塞方式影响线程调度

while True: pass会让主线程疯狂占用CPU,可能导致Listener线程无法正常调度。换成带休眠的循环,给Listener线程让出CPU时间:

import pynput.keyboard as kb
import time

def say(key):
    print(key, flush=True)

lis = kb.Listener(on_press=say, on_release=say)
lis.start()

while True:
    time.sleep(0.1)  # 休眠0.1秒,让出CPU资源

4. 键盘事件被其他程序拦截

如果你的电脑上有游戏、全屏应用、输入法工具或安全软件,它们可能抢占了键盘事件,导致pynput接收不到。暂时关闭这些程序后再测试脚本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 13:18:19