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

Python基于pynput的键盘监听代码无法写入按键到文件问题排查

问题排查与修复方案

核心问题梳理

  • 变量名大小写不匹配:全局变量定义为Keys,但函数内声明的全局变量是keys,二者属于不同变量,无法正常存储捕获到的按键
  • 函数定义位置错误:write_file写在了on_press的if分支内部,且缩进错误,外部无法调用该函数
  • on_press函数重复定义:后半段又定义了一次只有打印逻辑的on_press,覆盖了前面带写入逻辑的实现,实际运行时不会触发文件写入操作
  • 字符串替换语法错误:str(key).replace("'" ",")缺少参数分隔逗号,属于语法错误,执行会直接报错
  • 代码块缩进混乱:Python依赖缩进识别代码层级,原代码大量缩进错误导致逻辑分支无法正常执行

修复后完整可运行代码

import pynput
from pynput.keyboard import Key, Listener

count = 0
keys = []

def write_file(keys):
    with open("logs.txt", "a", encoding="utf-8") as f:
        for key in keys:
            k = str(key).replace("'", "")
            if k.find("space") > 0:
                f.write('\n')
            elif k.find("Key") == -1:
                f.write(k)

def on_press(key):
    global keys, count
    keys.append(key)
    count += 1
    print("{0} pressed".format(key))

    if count >= 5:
        count = 0
        write_file(keys)
        keys = []

def on_release(key):
    if key == Key.esc:
        # 退出前写入剩余未存的按键,避免数据丢失
        if keys:
            write_file(keys)
        return False

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

额外优化说明

  • 统一变量名大小写,保证全局变量引用正确
  • 将write_file移到全局作用域,调整为正确缩进
  • 删除重复定义的无效on_press函数,保留完整写入逻辑
  • 修复字符串替换语法错误,实现去除按键字符串前后多余单引号
  • 新增退出前写入剩余按键逻辑,避免最后不足5个按键的内容丢失
  • 打开文件时指定utf-8编码,避免不同系统下编码兼容报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 04:36:10