出于测试目的,我正在尝试编写脚本来模拟游戏手柄。
我已经使用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 按钮?
答案 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')