首页 > 解决方案 > python evdev 写入/注入输入设备的速度是否有限制?

问题描述

我有一个使用 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)

一个可能相关的问题:

使用 Python evdev 模拟控制器 dpad 按钮

标签: pythonlinuxinputgamepadevdev

解决方案


推荐阅读