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

如何将keyboard.record结果存TXT并通过keyboard.play调用?

解决Python键盘宏跨进程回放问题

问题根源

你遇到的核心问题是:keyboard.record()返回的是KeyEvent对象列表,直接转字符串会丢失对象属性;而默认的to_json序列化后,跨进程读取得到的是普通字典,不是KeyEvent实例,keyboard.play()无法识别这些字典,导致回放失败。

解决方案:自定义序列化与反序列化

手动提取KeyEvent的关键属性保存为JSON,回放时再把字典重新构造为KeyEvent对象,就能实现跨进程的宏存储与回放。

1. 录制宏并序列化到文件

import keyboard
import json

def record_macro(file_path):
    # 录制按键直到按下Esc
    events = keyboard.record(until='Esc')
    # 将每个KeyEvent转为可序列化的字典
    serialized_events = []
    for event in events:
        serialized_events.append({
            'name': event.name,
            'time': event.time,
            'scan_code': event.scan_code,
            'is_down': event.is_down,
            'device': event.device,
            'modifiers': event.modifiers,
            'is_keypad': event.is_keypad
        })
    # 写入JSON文件
    with open(file_path, 'w', encoding='utf-8') as f:
        json.dump(serialized_events, f, indent=2)

2. 读取文件并回放宏

def play_macro(file_path):
    # 读取JSON中的序列化数据
    with open(file_path, 'r', encoding='utf-8') as f:
        serialized_events = json.load(f)
    # 将字典重新构造为KeyEvent对象
    events = []
    for event_dict in serialized_events:
        event = keyboard.KeyEvent(
            name=event_dict['name'],
            time=event_dict['time'],
            scan_code=event_dict['scan_code'],
            is_down=event_dict['is_down'],
            device=event_dict['device'],
            modifiers=event_dict['modifiers'],
            is_keypad=event_dict['is_keypad']
        )
        events.append(event)
    # 执行回放
    keyboard.play(events)

3. 使用示例

# 录制宏到文件
record_macro('my_macro.json')

# 跨进程回放(比如另一个脚本中)
play_macro('my_macro.json')

注意事项

  • 确保使用相同版本的keyboard库,不同版本的KeyEvent属性可能存在差异,需对应调整序列化的字段。
  • 部分特殊按键(如多媒体键、自定义快捷键)可能需要额外处理属性,建议测试覆盖常用场景。
  • 存储文件时尽量使用绝对路径,避免跨进程运行时出现路径找不到的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 14:13:25