Как определить, подключено ли USB-устройство с помощью python? - PullRequest
3 голосов
/ 01 февраля 2020

Я хочу создать сценарий, который обнаружит, как только USB-накопитель будет подключен к компьютеру, и пока просто печатать в cmd detect .

Примечание. Я использую windows после поиска я обнаружил, что мне нужно использовать пакет pyudev для связи с последовательными портами, и мне нужно знать идентификатор поставщика USB-устройства.

я пытался написать ниже код:

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))

но система cra sh и отображает эту ошибку:

import fcntl ModuleNotFoundError: No module named 'fcntl'

Я думаю, что fcntl работает только на Ubuntu , потому что я пытался установить пакет, но он не существует

Ответы [ 2 ]

0 голосов
/ 02 февраля 2020

Я решил свой вопрос и написал этот скрипт, который позволяет мне определять последнее подключаемое съемное устройство.

код:

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))
0 голосов
/ 01 февраля 2020

попробуйте это

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

...