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

如何将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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 21:06:03