3

我想创建一个脚本,一旦将 USB 驱动器插入计算机,它就会检测到,现在只是在 cmd detect中打印。

注意我使用windows搜索后发现我需要使用pyudev包才能与串口通信,并且我需要知道USB设备的供应商ID。

我试图编写以下代码:

import pyudev
context = pyudev.Context()
monitor = Monitor.from_netlink()
# For USB devices
monitor.filter_by(susbsytem='usb')
# OR specifically for most USB serial devices
monitor.filter_by(susbystem='tty')
for action, device in monitor:
    vendor_id = device.get('ID_VENDOR_ID')

    if vendor_id in ['USB\\VID_0930&PID_6544&REV_0100'] or vendor_id in ['USB\\VID_0930&PID_6544']:
        print ('Detected {0} for device with vendor ID {1}'.format(action, vendor_id))

但系统崩溃并显示此错误:

import fcntl ModuleNotFoundError: No module named 'fcntl'

我认为 fcntl 仅适用于 Ubuntu,因为我尝试安装该软件包但它不存在。

4

2 回答 2

1

我解决了我的问题,我编写了这个脚本,让我能够检测插入的最后一个可移动设备。

代码:

import win32api
import win32file

# Returns a list containing letters from removable drives
drive_list = win32api.GetLogicalDriveStrings()
drive_list = drive_list.split("\x00")[0:-1]  # the last element is ""
for letter in drive_list:
    if win32file.GetDriveType(letter) == win32file.DRIVE_REMOVABLE:# check if the drive is of type removable 
print("list drives: {0}".format(letter))
于 2020-02-02T11:50:09.153 回答
0

试试这个

import win32file
def locate_usb():
    drive_list = []
    drivebits = win32file.GetLogicalDrives()
    for d in range(1, 26):
        mask = 1 << d
        if drivebits & mask:
            # here if the drive is at least there
            drname = '%c:\\' % chr(ord('A') + d)
            t = win32file.GetDriveType(drname)
            if t == win32file.DRIVE_REMOVABLE:
                drive_list.append(drname)
    return drive_list

代码实际上取自https://mail.python.org/pipermail/python-win32/2006-December/005406.html

于 2020-02-01T07:49:00.590 回答