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

Я использую Python на Ubuntu 9.04, скажем, у меня есть два USB-устройства, подключенные к одному ПК. как я могу идентифицировать устройства в коде Python..... например, как

если идентификатор usb-порта == A записать данные на устройство 1, если идентификатор usb-порта == 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 не может найти dylibs usb.

Вы должны добавить путь к вашей libusb в $DYLD_LIBRARY_PATH (например, /opt/local/lib, где бы ваш macport не установил ее).

Как только я его добавил, пюсб работал нормально.

person cmollis    schedule 17.02.2014
comment
Я только что столкнулся с этой проблемой и успешно установил libusb через доморощенный: 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