【问题标题】:keyboard.play function not working correctlykeyboard.play 功能无法正常工作
【发布时间】:2019-01-03 20:26:19
【问题描述】:

当使用事件列表调用函数时,它什么也不做。

我尝试将其保存到文件或以某种方式共享变量,但到目前为止没有任何效果。

这是record.py,它记录按下的键并将它们保存到文件中

import keyboard
import pickle

with open('keys.txt','wb') as f:
    pickle.dump(keyboard.record(until='*'),f)

这里是script.py,它从文件中加载按下的键并再次按下它们

import keyboard
import pickle

with open('keys.txt','rb') as f:
    keyboard.play(pickle.load(f))

它没有显示任何错误,但它什么也不做 - 它应该输入保存在文件中的内容,但它没有。

【问题讨论】:

  • 你明白open('file.txt', 'wb')'wb'代表什么吗?这使它成为一个二进制文件。您不能简单地将字节写入文件并期望从中获得文本。注意pickle 只是将一个对象变成二进制流(字节对象),并且可以再次从该流中返回一个对象。
  • 我需要将事件列表保存到文件中,这是我发现的唯一方法
  • pickle.load(f) 完成了它的工作,它加载了正确的列表,但是这个函数不知何故什么也没做。
  • 哪个函数“什么都不做”?
  • keyboard.play() 不按也不做任何事情,它什么也不输入。如果我将代码更改为只写出由 pickle.load(f) 创建的列表,它会写入正确的列表 - 列表中充满了键盘事件,所以这没有错误

标签: python python-3.x pickle keyboard-events


【解决方案1】:

尝试先将键盘中的事件设置为列表。

记录.py

import keyboard as k
import pickle as p
events = k.record(until = '*')
with open('events.txt', mode = 'wb') as file:
    p.dump(events, file)

脚本.py

import keyboard as k
import pickle as p
with open('events.txt', mode = 'rb') as file:
    events = p.load(file)
# end with
k.replay(events)

【讨论】:

  • 嗯...你是用 IDLE 运行这个吗?
  • 确实...键盘安装正确吗?
  • 嗯。我已经测试过了。当您重新启动Shell时,再次播放它不会专注于Shell。看起来它正在专注于桌面......
  • 是的...我也试过了。它在我的任务栏上打开了第一件事,但它不再做任何事情。我会看看其他一些类似的问题......
  • 我认为键盘不应该受到责备......泡菜模块可能会以某种方式改变事情。
【解决方案2】:

我通过放置“无用”功能解决了这个问题,这些功能并没有真正实现任何目标。 record.py 保持不变,我更改了 script.py 就像这样:

import keyboard
import pickle

keyboard.start_recording()
keyboard.stop_recording()

with open('keys.txt','rb') as f:
    keyboard.play(pickle.load(f))

【讨论】: