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

使用pynput监听键盘同时写入文件功能失效问题排查

代码问题分析及修复方案

问题根源

你的代码中,listener.join()会阻塞程序运行,直到监听线程终止,导致后续的lol.close()永远无法执行。同时,文件写入默认使用缓冲机制,未手动刷新或关闭文件时,内容只会停留在内存缓冲区,不会真正写入磁盘。

修复方案

方案1:手动刷新缓冲区

每次写入后调用flush(),强制将缓冲区内容写入磁盘:

from pynput.keyboard import Key, Listener

lol = open("GOTEM.txt", 'a')

def on_press(key):
    lol.write('{0}'.format(key))
    lol.flush()  # 立即刷新缓冲区

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

lol.close()

方案2:用with语句管理文件(推荐)

with语句会自动处理文件的打开和关闭,即使程序异常也能保证文件正确关闭,同时自动刷新缓冲区:

from pynput.keyboard import Key, Listener

with open("GOTEM.txt", 'a') as lol:
    def on_press(key):
        lol.write('{0}'.format(key))
    
    with Listener(on_press=on_press) as listener:
        listener.join()

方案3:添加监听停止触发(可选)

如果需要手动终止监听,可以添加释放按键的判断,比如按下Esc键停止:

from pynput.keyboard import Key, Listener

with open("GOTEM.txt", 'a') as lol:
    def on_press(key):
        lol.write('{0}'.format(key))
        lol.flush()

    def on_release(key):
        if key == Key.esc:
            return False  # 返回False终止监听

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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 16:01:48