模拟游戏手柄的硬件信号

时间:2019-07-26 17:33:58

标签: python python-3.x

出于测试目的,我正在尝试编写脚本来模拟游戏手柄。

我已经使用inputs库来捕获游戏手柄发送的信号,但是当我将这些信号发送到计算机进行解释时(例如,使计算机按 A 给我)

代码:

while 1:
    events = get_gamepad()
    for event in events:
        print(event.ev_type, event.code, event.state)

结果:

Absolute ABS_RY -210
Sync SYN_REPORT 0
Absolute ABS_HAT0X -1
Sync SYN_REPORT 0
Absolute ABS_HAT0X 0
Sync SYN_REPORT 0
Key BTN_SOUTH 1
Sync SYN_REPORT 0
Key BTN_SOUTH 0
Sync SYN_REPORT 0
Absolute ABS_RY -274
Sync SYN_REPORT 0

这是由于我在d-pad上按下了左键并按下了 A 按钮。

我能够使用pynput编写脚本,这样我就可以输入以下内容:

from pynput.keyboard import Key, Controller
import time

kb = Controller()

#time before typing
time.sleep(4)

kb.press('h')
kb.release('h')
kb.press('e')
kb.release('e')
kb.press('l')
kb.release('l')
kb.press('l')
kb.release('l')
kb.press('o')
kb.release('o')

所以我的问题是:

如何使用类似的方法发送(例如)按下 A 按钮?

3 个答案:

答案 0 :(得分:0)

# Your code modified

def method_a():
    # do something here, maybe react on
    # an additional parameter for press/release
    pass


def method_b():
    pass


while 1:
    events = get_gamepad()
    for event in events:
        print(event.ev_type, event.code, event.state)
        if event.code == "A":
            method_a()
        if event.code == "B":
            method_b()

# testing: run indirectly the methods of your 
# business logic to mock the hardware

# unittests or similar here

def test_method_aba():
    method_a()
    method_b()
    method_a()
    # check state, do assertions

答案 1 :(得分:0)

class my_event:
    def __init__(self, code, ev_type, state):
        self.code = code
        self.ev_type = ev_type
        self.state = state


def get_gamepad_mocked():
    event_list = []
    event_list.append(my_event(code="A", state="press"))
    event_list.append(my_event(code="A", state="release"))
    event_list.append(my_event(code="B", state="press"))
    return event_list


while 1:
    events = get_gamepad_mocked()
    for event in events:
        print(event.ev_type, event.code, event.state)

您需要添加期望值ev_type。这里没有硬件可以进行测试。

答案 2 :(得分:0)

我不确定您打算将其用于什么操作系统,但是有一个很棒的库可以在Python中生成键盘/鼠标事件,称为PyUserInput。

[https://github.com/PyUserInput/PyUserInput]

from pykeyboard import PyKeyboard
k = PyKeyboard()

k.press_key('H')