用于linux env的python中的usb自动检测

时间:2017-12-17 16:59:22

标签: python linux serial-port usb pyserial

我在python中使用轮询命令(glob('/ dev / tty [A-Za-z] *'))来定期检测连接到我的linux pc的usb设备。有没有办法检测自动连接的USB设备?

3 个答案:

答案 0 :(得分:0)

这是一个开始。您可以找到您的USB供应商here。您必须自己编写current_list_usb代码,设置一个时间间隔进行检查,以便比较并查看是否附加了新设备。导入usb模块时要使用的一些代码:

import usb, usb.core, usb.util, usb.backend.libusb1

...snippet...

#    usb.core.find()
# find our device

dev = usb.core.find(idVendor= ...., idProduct= ....)
#dev_1 = usb.util.find_descriptor(cfg, find_all =True)

# was it found?
if dev is None:
    raise ValueError('Device not found')

#x = dev.set_configuration()
#print (dev)
#print (help(usb.core))
if usb.core.find(find_all=True, bDeviceClass=7) is None:
    raise ValueError('No printer found')

答案 1 :(得分:0)

执行此操作的常规方法是制定udev规则,告诉您的程序存在新的tty

自定义udev规则可能看起来像这样(让我们称之为/etc/udev/rules.d/50-custom-tty.rules

KERNEL=="ttyUSB[0-9]+", RUN+="/usr/bin/my-program"

Here's编写udev规则的好指南。

在这种情况下,只要在/ dev中创建新的/usr/bin/my-program设备,程序ttyUSB就会运行。 udev将设置一组环境变量来准确告诉您刚插入的内容。然后,您可以通知主程序存在新的ttyUSB,并且应该使用它。请注意,无论您运行什么程序都应该很小,否则udev守护程序会在需要太长的时间内将其终止。

答案 2 :(得分:0)

我建议使用libudev并创建一个udev监视器对象来检测热插拔设备。以下是您了解libudev及其监控功能的起点:

https://www.freedesktop.org/software/systemd/man/libudev.html

可能有一个很好的Python库包装了udev,因此你可以在不编写C代码的情况下使用它的功能。