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

