gpt4 book ai didi

python - 关于检测usb设备的问题

转载 作者:太空宇宙 更新时间:2023-11-03 12:10:01 25 4
gpt4 key购买 nike

我需要在插入和拔出 USB 设备时检测它,我用 dbus 编写了一个 python 程序。

但奇怪的是设备在插拔时至少会挂载三次

监控代码如下:

            device = dbus.Interface(self.bus.get_object("org.freedesktop.Hal", udi),
"org.freedesktop.Hal.Device")

self.notify_message(device.GetProperty("info.udi"))

然后当我尝试插入 USB 设备(例如键盘)时我们会捕获输出

Mon Jul  4 03:47:31 2011    /org/freedesktop/Hal/devices/usb_device_413c_2003_noserial

Mon Jul 4 03:47:31 2011 /org/freedesktop/Hal/devices/usb_device_413c_2003_noserial_if0

Mon Jul 4 03:47:31 2011 /org/freedesktop/Hal/devices/usb_device_413c_2003_noserial_if0_logicaldev_input

因此,每次插拔时都会显示 3 次通知如何只显示一次通知?

最佳答案

我不熟悉 dbus,但是看看你得到的设备名称:

usb_device_413c_2003_noserial
usb_device_413c_2003_noserial_if0
usb_device_413c_2003_noserial_if0_logicaldev_input

第一个设备可能代表整个 USB 设备。第二个设备很可能代表所述设备的接口(interface) 0。第三个设备可能表示接口(interface) 0 的端点或某些其他功能,这些功能可能会或可能不会在设备描述符中指定。

即使只插入一个物理设备,您也会得到三个不同的逻辑设备。这种事情对于实现复合 USB 设备的人来说很重要。

不过,要回答这个问题:如果您只想收到一次通知,那么在您的通知处理函数中,您应该通过查看设备名称字符串并决定您是否关心来过滤掉您不关心的通知事件与否。例如,您可能决定不关心名称中带有 if0 的设备,因此您的伪代码将是:

def notificationHandler(notification)
if notification.name does not contain `if0`
pass notification to higher level code
end
end

关于python - 关于检测usb设备的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6565187/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com