我用 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.py
。evdev1.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] )