ImportError:无法导入名称“ InputDevice”-Evdev

时间:2019-02-23 20:03:27

标签: python joystick gamepad evdev

我使用sudo -H pip install evdev在Raspberry 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 shell上执行from evdev import InputDevice, categorize, ecodes时,它似乎可以工作。 我究竟做错了什么?我该怎么解决?

非常感谢Davi。

2 个答案:

答案 0 :(得分:0)

这有点令人困惑,但是在Linux中有许多新的访问游戏手柄/游戏杆的方法。较早的joydev将设备显示为“ js *”,而较新的evdev将它们显示为“事件*”

如果您使用的是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] )

答案 1 :(得分:0)

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

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