添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
登录

如何使用python或cmd从windows获取连接的USB设备列表

内容来源于 Stack Overflow,遵循 CC BY-SA 4.0 许可协议进行翻译与使用。IT领域专用引擎提供翻译支持

腾讯云小微IT领域专用引擎提供翻译支持

原文
Stack Overflow用户 修改于2019-11-14
  • 该问题已被编辑
  • 提问者: Stack Overflow用户
  • 提问时间: 2019-11-14 13:28

我需要通过使用python或cmd从windows获取连接的USB设备列表。

对于蟒蛇我正在尝试这个。

import win32com.client
def get_usb_device():
        usb_list = []
        wmi = win32com.client.GetObject("winmgmts:")
        for usb in wmi.InstancesOf("Win32_USBHub"):
            print(usb.DeviceID)
            print(usb.description)
            usb_list.append(usb.description)
        print(usb_list)
        return usb_list
    except Exception as error:
        print('error', error)
get_usb_device()

因此,我得到了这个:

['USB Root Hub (USB 3.0)', 'USB Composite Device', 'USB Composite Device']

但我不知道全名的意思。

对于cmd,我也在尝试:

wmic path CIM_LogicalDevice where "Description like 'USB%'" get /value

我也不知道连接usb设备的全名是什么意思。

当我通过usb连接鼠标、键盘、钢笔驱动器或打印机时,我想要这样的名称。就像'a4tech鼠标‘,或者即使我得到’鼠标‘,那也没关系。这种类型的名称出现在windows 10设置的设备部分。但是我得到了“USB(USB3.0)”,“”,这实际上没有任何意义。用蟒蛇有可能吗?

如果有人知道这个答案,请帮忙。对我来说很重要。

浏览 8 关注 0 得票数 5
  • 得票数为Stack Overflow原文数据
原文
操作
修改于2019-11-14
  • 该回答已被编辑
  • 回答者: Stack Overflow用户
  • 回答时间: 2019-11-14 14:04
得票数 1

当我通过usb连接鼠标、键盘、钢笔驱动器或打印机时,我想要这样的名字.

它被称为“友好名称”,您可以使用:

import subprocess, json
out = subprocess.getoutput("PowerShell -Command \"& {Get-PnpDevice | Select-Object Status,Class,FriendlyName,InstanceId | ConvertTo-Json}\"")
j = json.loads(out)
for dev in j:
    print(dev['Status'], dev['Class'], dev['FriendlyName'], dev['InstanceId'] )
Unknown HIDClass HID-compliant system controller HID\VID_046D&PID_C52B&MI_01&COL03\9&232FD3F1&0&0002
OK DiskDrive WD My Passport 0827 USB Device USBSTOR\DISK&VEN_WD&PROD_MY_PASSPORT_0827&REV_1012\575836314142354559545058&0
...
修改于2020-07-13
  • 该回答已被编辑
  • 回答者: Stack Overflow用户
  • 回答时间: 2019-11-14 14:10
得票数 3

不确定这是否是您想要的,但是在Windows10上使用Python3和 pywin32 ,您可以使用它来获取所有的驱动器字母和类型:

import os
import win32api
import win32file
os.system("cls")
drive_types = {
                win32file.DRIVE_UNKNOWN : "Unknown\nDrive type can't be determined.",
                win32file.DRIVE_REMOVABLE : "Removable\nDrive has removable media. This includes all floppy drives and many other varieties of storage devices.",
                win32file.DRIVE_FIXED : "Fixed\nDrive has fixed (nonremovable) media. This includes all hard drives, including hard drives that are removable.",
                win32file.DRIVE_REMOTE : "Remote\nNetwork drives. This includes drives shared anywhere on a network.",
                win32file.DRIVE_CDROM : "CDROM\nDrive is a CD-ROM. No distinction is made between read-only and read/write CD-ROM drives.",
                win32file.DRIVE_RAMDISK : "RAMDisk\nDrive is a block of random access memory (RAM) on the local computer that behaves like a disk drive.",
                win32file.DRIVE_NO_ROOT_DIR : "The root directory does not exist."
drives = win32api.GetLogicalDriveStrings().split('\x00')[:-1]
for device in drives:
    type = win32file.GetDriveType(device)
    print("Drive: %s" % device)
    print(drive_types[type])
    print("-"*72)
os.system('pause')

你的USB设备有 win32file.DRIVE_REMOVABLE 类型-所以这就是你要找的东西。与打印所有驱动器和类型不同,您可以插入一个 if 条件来只处理此类可移动设备。

请注意: SD卡和其他可移动存储介质具有相同的驱动器类型.

哈哈!

更新,2020年7月13日:

要进一步了解连接设备的信息,请查看 用于Python的WMI模块

检查此示例输出,它们列出有关设备的不同信息,包括制造商描述、序列号等:

import wmi
c = wmi.WMI()
for item in c.Win32_PhysicalMedia():
    print(item)
for drive in c.Win32_DiskDrive():
    print(drive)