我想提供一个/dev/DEVICE
路径作为输入,并将设备“人类友好”名称作为输出。
我成功地从 中获得了这个名字ID_MODEL_ENC
,就像在这个片段中一样:
def dev_name(dev_path):
from pyudev import Context
for device in Context().list_devices(DEVNAME=dev_path):
print device.get('ID_MODEL_ENC').decode('string_escape')
但它不适用于蓝牙设备。似乎ID_MODEL_ENC
没有那么广泛使用。
在我的应用程序中,我只会将它用于操纵杆,然后设备路径将始终为/dev/input/js*
.
示例 1:USB 摇杆是 js0
$ dev_name.py /dev/input/js0
Twin USB Joystick
示例2:蓝牙摇杆是js2
$ dev_name.py /dev/input/js2
Traceback (most recent call last):
File "pyudev_get_js_name.py", line 9, in <module>
dev_name(sys.argv[1])
File "pyudev_get_js_name.py", line 7, in dev_name
print '"'+ device.get('ID_MODEL_ENC').decode('string_escape') +'"'
AttributeError: 'NoneType' object has no attribute 'decode'
这显然是因为该设备没有该ID_MODEL_ENC
属性。
只是为了确保系统知道设备的名称,我们可以直接在 shell 提示符中执行此操作:
$ sys_dev_path="$(udevadm info --name=/dev/input/js2 | grep DEVPATH | cut -d= -f2)"
$ cat "/sys$(dirname $sys_dev_path)/name"
8Bitdo NES30 GamePad
我知道我可以用 python 做一些类似的东西并检查/sys/devices/.../name
文件的内容,但它看起来像一个临时的。有没有办法让 pyudev 给我操纵杆名称?
注意:我知道使用 pygame 获取操纵杆名称非常简单,但这不是一个选项。
提前致谢。