идентификация на USB устройство

използвам python на ubuntu 9.04, казвам, че имам две USB устройства, свързани към един компютър. как мога да идентифицирам устройствата в код на python.....например като

if usb port id == A запис на данни на устройство 1 if usb port id == B запис на данни на устройство 2

някакви идеи....


person omrihsan    schedule 21.03.2010    source източник


Отговори (4)


Опитвали ли сте pyUsb? Инсталирайте с помощта на:

pip install pyusb

Ето фрагмент от това, което можете да направите:

import usb
busses = usb.busses()
for bus in busses:
    devices = bus.devices
    for dev in devices:
        print("Device:", dev.filename)
        print("  idVendor: %d (0x%04x)" % (dev.idVendor, dev.idVendor))
        print("  idProduct: %d (0x%04x)" % (dev.idProduct, dev.idProduct))

Ето добър урок за pyUsb.

За повече документация използвайте интерактивния режим на Python с dir() и help().

person systempuntoout    schedule 21.03.2010
comment
използвах горния код в терминален прозорец...връща грешка обектът няма атрибут устройства можете ли да ме насочите към някакъв урок, който може да помогне...или да разработите този модул usb - person omrihsan; 21.03.2010
comment
Кодът работи за мен на Osx с Python 2.6 и pyUsb, инсталиран с порт. Каква е вашата версия на платформа\Python? - person systempuntoout; 21.03.2010
comment
сега инсталирах pyusb и стартирах примерния usbenum.py (споменатият от вас код изглежда доста подобен)....имам 3 usb порта на моя компютър, но резултатите показват 6 изхода към dev.filename...те са числа като 001 или 005 и т.н... и те се промениха, когато включих устройства...(не съм добър с usb стандартите)....просто искам да идентифицирам всяко устройство/порт... кой параметър в примера би помогнал аз.... - person omrihsan; 21.03.2010
comment
Можете да говорите с устройство само като знаете неговия idVendor/idProduct и независимо от кой порт е свързано. - person systempuntoout; 22.03.2010

Отговорът на @systempuntoout е хубав, но днес открих по-лесен начин за намиране или повторение на всички устройства: usb.core.find(find_all=True)

Следвайки твоя пример:

import usb
for dev in usb.core.find(find_all=True):
    print "Device:", dev.filename
    print "  idVendor: %d (%s)" % (dev.idVendor, hex(dev.idVendor))
    print "  idProduct: %d (%s)" % (dev.idProduct, hex(dev.idProduct))
person Diego Navarro    schedule 12.09.2012

но каквото и да е.. някой ще потърси отговора в един момент:

Аз съм на mac (osx 10.9).. Успешно инсталирах libusb с mac портове, но получавах съобщението „няма наличен бекенд“. Това е така, защото python не може да намери usb dylibs.

Трябва да добавите пътя към вашия libusb към вашия $DYLD_LIBRARY_PATH (напр. /opt/local/lib, където и да го е инсталирал вашият macport).

Веднага щом го добавих, pyusb заработи добре.

person cmollis    schedule 17.02.2014
comment
Току-що се натъкнах на този проблем и успешно инсталирах libusb чрез homebrew: brew install libusb - person tfeldmann; 14.08.2015

Добре, аз също търсих в гугъл за отговори, ето фрагмент, който работи:

def locate_usb():
import win32file
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

person Arjuna    schedule 23.10.2015