【问题标题】:ImportError: cannot import name 'InputDevice' - EvdevImportError:无法导入名称“InputDevice”-Evdev
【发布时间】:2019-07-17 15:28:45
【问题描述】:

我使用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 时,它似乎可以工作。 我究竟做错了什么?我该如何解决这个问题?

谢天谢地,戴维。

【问题讨论】:

    标签: python joystick gamepad evdev


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      这有点令人困惑,但在 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] )
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-03-31
        • 2014-10-10
        • 2014-09-20
        • 2014-08-28
        • 2014-06-10
        • 2016-05-16
        • 2019-05-25
        • 2017-04-22
        相关资源
        最近更新 更多