【发布时间】:2017-04-25 01:06:41
【问题描述】:
我想提供一个/dev/DEVICE 路径作为输入,并将设备“人类友好”名称作为输出。
我成功地从ID_MODEL_ENC 获得了这个名字,就像在这个 sn-p 中一样:
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 获取游戏杆名称非常简单,但这里没有选择。
提前致谢。
【问题讨论】: