如何将k.py的按键数据传递到key.py并存储到变量中
重要合规提醒:键盘记录工具涉及用户隐私信息采集,仅可在你拥有完全所有权、且已获得所有使用人明确书面授权的设备上运行,未授权记录他人按键行为违反《网络安全法》《个人信息保护法》等相关法律法规,后果自负,请严格遵守法律规定。
实现说明
你当前的实现直接将日志输出到key.py文件,会直接覆盖该Python文件的源代码,完全无法满足将按键存储到变量的需求,需要先修改日志输出的错误配置,可根据你的使用场景选择以下两种实现方案:
方案1:key.py作为主程序导入k.py逻辑(推荐,适合两个文件配合启动的场景)
这种方案不需要进程间通信,实现更简单,性能也更高。
第一步:修改k.py代码,封装监听逻辑并支持回调注册
from pynput.keyboard import Key, Listener # 全局回调函数,默认无操作 key_press_callback = None def on_press(key): # 处理按键转为字符串 key_content = str(key) # 调用注册的回调传递按键数据 if callable(key_press_callback): key_press_callback(key_content) def start_key_listener(): with Listener(on_press=on_press) as listener: listener.join()
第二步:编写key.py代码,定义存储变量并注册回调
from k import start_key_listener, key_press_callback import threading # 存储按键数据的变量,可根据需求修改为其他类型 key_records = [] # 自定义处理按键的回调函数 def handle_key(key_str): # 把按键追加到存储变量 key_records.append(key_str) # 可在这里添加其他业务逻辑,比如触发特定按键后导出数据等 print(f"记录到按键:{key_str},当前总记录数:{len(key_records)}") # 注册回调到k.py key_press_callback = handle_key if __name__ == "__main__": # 若需要同时运行其他逻辑,可把监听放到子线程启动,避免阻塞 # listener_thread = threading.Thread(target=start_key_listener, daemon=True) # listener_thread.start() # 直接启动监听用下面这行 start_key_listener()
直接运行python key.py即可,所有捕获到的按键都会实时存入key_records变量,你可以在key.py的任意位置调用该变量做后续处理。
方案2:k.py和key.py独立运行(适合两个进程分开启动的场景)
如果你的k.py和key.py需要分别启动,互不依赖,可以用本地文件作为中转实现数据传递。
修改k.py代码,将按键写入中转缓存文件
from pynput.keyboard import Key, Listener import json # 缓存批量写入,减少IO频率 key_buffer = [] BUFFER_THRESHOLD = 5 CACHE_FILE = "key_cache.json" def on_press(key): key_buffer.append(str(key)) if len(key_buffer) >= BUFFER_THRESHOLD: with open(CACHE_FILE, "a", encoding="utf-8") as f: json.dump(key_buffer, f, ensure_ascii=False) f.write("\n") key_buffer.clear() with Listener(on_press=on_press) as listener: listener.join()
编写key.py代码,读取缓存文件并存入变量
import json import time key_records = [] CACHE_FILE = "key_cache.json" # 记录上次读取的文件位置,避免重复读取 last_read_pos = 0 while True: try: with open(CACHE_FILE, "r", encoding="utf-8") as f: f.seek(last_read_pos) for line in f: line = line.strip() if not line: continue batch_keys = json.loads(line) key_records.extend(batch_keys) print(f"新增{len(batch_keys)}条按键记录,总记录数:{len(key_records)}") last_read_pos = f.tell() except FileNotFoundError: # 缓存文件还没生成,等待下一轮读取 pass # 每1秒读取一次,可根据需求调整频率 time.sleep(1)
使用时先启动k.py,再启动key.py即可实现按键数据同步到key.py的变量中。
内容的提问来源于stack exchange,提问作者devv
相关产品推荐
相关产品推荐

