我在python中使用轮询命令(glob('/ dev / tty [A-Za-z] *'))来定期检测连接到我的linux pc的usb设备。有没有办法检测自动连接的USB设备?
答案 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代码的情况下使用它的功能。