导入错误: 无法导入名称"输入设备" - Evdev



我用 sudo -H pip install evdev安装了我的覆盆子pi 3 b 上的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'

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

谢天谢地,davi。

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

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

这有点令人困惑,但是有一些旧的和新的方法可以在Linux中访问GamePads/joysticks。较旧的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] )

相关内容

  • 没有找到相关文章

最新更新