首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 ><Solved> (PyUSB)检测最新/新的插头USB

<Solved> (PyUSB)检测最新/新的插头USB
EN

Stack Overflow用户
提问于 2022-10-03 14:31:19
回答 1查看 122关注 0票数 0

我有一个功能,可以列出所有与USB接口的计算机连接。

我想要检测到我刚刚插入的最新/新的USB,然后打印出它的txt文件,从上一个/新USB我只是插入.

我想出的一种方法是,在插入USB之前,该函数可以运行time1。然后有10个装置。在我插入time2之后,有11个设备。这样我就能区分最后一个了。

我阅读了相关的问题,Trigger new plugged USB-HDD or USB-Stick device,但仍然不知道如何做。

  • 函数可以列出与USB端口的所有计算机连接:

代码语言:javascript
复制
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的输出:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-03 18:40:49

您可以使用字典来跟踪已找到的设备。每个设备都有其独特的串行标识,可以作为密钥使用。

然后重复扫描几次(例如,在一个循环中有几秒钟的延迟)。如果一个设备还没有用它的串行id在字典中注册,你知道它是最近添加的。

示例

代码语言:javascript
复制
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.')
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73936956

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档