我有一个使用 evdev 模拟游戏手柄按钮按下的 python 程序。使用的设备是从xbox usb 游戏手柄“克隆”的,通过使用ui = evdev.UInput.from_device(...)
但由于某种原因,印刷机有时似乎不一致。
下面是我用来模拟 A 按钮点击的功能:
def press_A_button():
ui.write(evdev.ecodes.EV_KEY, evdev.ecodes.BTN_A, 1)
ui.write(evdev.ecodes.EV_SYN, 0, 0)
sleep(0.01)
ui.write(evdev.ecodes.EV_KEY, evdev.ecodes.BTN_A, 0)
ui.write(evdev.ecodes.EV_SYN, 0, 0)
sleep(0.01)
如果我完全删除sleep
's,似乎根本不会注册任何印刷机。尽管0.01
似乎也太快了,导致它似乎不时注册/跳过点击。(我只是使用 jstest-gtk 来观察它的行为)
这是我测试功能的方法:
while True:
try:
press_A_button()
# putting a sleep here, e.g a sleep(2), seemingly still doesn't
# keep it from sometimes missing the tap
except KeyboardInterrupt:
ui.close()
break
那么有没有办法找出应该用来让它持续工作的最佳时间呢?
或者问题可能不在于我的代码,而在于其他软件的轮询率(在本例中为 jstest-gtk)?
一个可能相关的问题: