如何使用python检测USB设备是不是插入?
Posted
技术标签:
【中文标题】如何使用python检测USB设备是不是插入?【英文标题】:How to detect if USB device is plugged in using python?如何使用python检测USB设备是否插入? 【发布时间】:2020-02-01 06:26:04 【问题描述】:我想创建一个脚本,在 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,因为我尝试安装该软件包但它不存在。
【问题讨论】:
试试这个***.com/questions/7551546/…if vendor_id in ['USB\\VID_0930&PID_6544&REV_0100'] or vendor_id in ['USB\\VID_0930&PID_6544']:
== if vendor_id in ['USB\\VID_0930&PID_6544&REV_0100', 'USB\\VID_0930&PID_6544']:
【参考方案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))
【讨论】:
最后一行(打印)应该缩进/if语句的一部分,不是吗?【参考方案2】:试试这个
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
【讨论】:
以上是关于如何使用python检测USB设备是不是插入?的主要内容,如果未能解决你的问题,请参考以下文章
在linux系统里,如何检查新插入的USB设备是不是被系统识别?