2

我在我的 Raspberry Pi 3 B+ 上安装了 evdev,带有sudo -H pip install evdev. 安装正常,我跑去python /usr/local/lib/python2.7/dist-packages/evdev/evtest.py看看它是否正常工作。一切都很好。

问题是在执行此 Python 代码时:

from evdev import InputDevice, categorize, ecodes
gamepad = InputDevice('/dev/input/js0')
print(gamepad)
for event in gamepad.read_loop():
  print(categorize(event)

我得到这个错误作为答案:

Traceback (most recent call last):
  File "evdev1.py", line 1, in <module>
    from evdev import InputDevice, categorize, ecodes
  File "/home/pi/Desktop/evdev.py", line 2, in <module>
    from evdev import InputDevice, categorize, ecodes
ImportError: cannot import name 'InputDevice'

但是当我from evdev import InputDevice, categorize, ecodes在 python shell 上执行时,它似乎可以工作。我究竟做错了什么?我该如何解决这个问题?

谢天谢地,戴维。

4

2 回答 2

1

它写在您的错误回溯中:您的工作目录中有一个名为的文件evdev1.py和一个文件evdev.pyfrom evdev import ...in会尝试evdev1.py从文件中导入"/home/pi/Desktop/evdev.py"- 这也是一个模块。

from evdev import ...这就是从另一个工作目录中调用有效的原因。

于 2019-12-11T09:28:49.083 回答
0

这有点令人困惑,但在 linux 中访问游戏手柄/操纵杆有新旧方法。较旧的joydev 将设备显示为“js*”,而较新的evdev 将它们显示为“event*”

如果您使用的是 evdev,则需要使用以“/dev/input/event”开头的事件路径,而不是以“/dev/input/js”开头的事件路径。

像这样识别设备:

import evdev
devices = [evdev.InputDevice(path) for path in evdev.list_devices()]
for device in devices:
    print(device.path, device.name)

或者,如果只有一个,只需使用出现的第一个。

import evdev
gamepad = evdev.InputDevice( evdev.list_devices()[0] )
于 2019-06-03T02:16:35.100 回答