我有一个功能,可以列出所有与USB接口的计算机连接。
我想要检测到我刚刚插入的最新/新的USB,然后打印出它的txt文件,从上一个/新USB我只是插入.
我想出的一种方法是,在插入USB之前,该函数可以运行time1。然后有10个装置。在我插入time2之后,有11个设备。这样我就能区分最后一个了。
我阅读了相关的问题,Trigger new plugged USB-HDD or USB-Stick device,但仍然不知道如何做。
。
import usb.core
import usb.backend.libusb1
print('idVendor idProduct Manufacturer - Product')
print('----------------------------------------------------')
busses = usb.busses()
for bus in busses:
for dev in bus.devices:
if dev:
xdev = usb.core.find(idVendor=dev.idVendor, idProduct=dev.idProduct)
if xdev._manufacturer is None:
xdev._manufacturer = usb.util.get_string(xdev, xdev.iManufacturer)
if xdev._product is None:
xdev._product = usb.util.get_string(xdev, xdev.iProduct)
print('%8d %9d %s - %s' % (dev.idVendor, dev.idProduct,
str(xdev._manufacturer).strip(),
str(xdev._product).strip()))所有USB的输出:
idVendor idProduct Manufacturer - Product
----------------------------------------------------
1133 49271 Logitech - USB Optical Mouse
1423 37728 - USB Reader 34148 4096 JetFlash - Mass Storage Device
7531 2 Linux 5.15.0-48-generic xhci-hcd - xHCI Host Controller
7531 3 Linux 5.15.0-48-generic xhci-hcd - xHCI Host Controller
5117 2112 Generic - External
7531 2 Linux 5.15.0-48-generic xhci-hcd - xHCI Host Controller
7531 3 Linux 5.15.0-48-generic xhci-hcd - xHCI Host Controller发布于 2022-10-03 18:40:49
您可以使用字典来跟踪已找到的设备。每个设备都有其独特的串行标识,可以作为密钥使用。
然后重复扫描几次(例如,在一个循环中有几秒钟的延迟)。如果一个设备还没有用它的串行id在字典中注册,你知道它是最近添加的。
示例
import time
from usb.core import find
from usb.util import get_string
import usb.backend.libusb1
def info_usb_device(dev):
xdev = find(idVendor=dev.idVendor, idProduct=dev.idProduct)
if xdev.bDeviceClass == 9: # don't list HUBs, see [USB class-codes](https://www.usb.org/defined-class-codes)
return
if xdev._manufacturer is None:
xdev._manufacturer = get_string(xdev, xdev.iManufacturer, langid=1033)
if xdev._product is None:
xdev._product = get_string(xdev, xdev.iProduct, langid=1033)
device_info = '[%20s] %8d %9d %s - %s' % (xdev.serial_number, dev.idVendor, dev.idProduct,
str(xdev._manufacturer).strip(),
str(xdev._product).strip())
return (xdev.serial_number, device_info)
def add_usb_devices(device_dict):
new_devices = []
for bus in usb.busses():
for dev in bus.devices:
if dev is None:
continue
serial_info = info_usb_device(dev)
if serial_info is not None:
(serial, info) = serial_info
if serial not in device_dict:
new_devices.append(serial)
device_dict[serial] = info
return new_devices
if __name__ == "__main__":
device_dict = {}
print('%22s %8s %9s %s' % ('serial', 'idVendor', 'idProduct', 'Manufacturer - Product'))
print('-'*22, '-'*8, '-'*9, '-'*30)
# first scan
add_usb_devices(device_dict)
for device_info in device_dict.values():
print(device_info)
# next scans
for i in range(5): # run 5 more scans
new_serials = add_usb_devices(device_dict)
if len(new_serials) > 0:
print('** (scan %d) FOUND NEW USB DEVICES/SERIALS: %s' % (i, new_serials))
for serial in new_serials:
print(device_dict[serial])
time.sleep(3) # waiting 3 seconds before new scan
print('Scans completed.')https://stackoverflow.com/questions/73936956
复制相似问题