2010-03-21 7 views
3

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

, если USB-порт идентификатор == A запись данных на устройство 1 , если USB-порт ID == B данные записи на устройство 2

любые идеи ....

ответ

6

Вы пробовали 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) 

Here хороший учебник pyUsb.

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

+0

я использовал приведенный выше код в окне терминала ... он возвращает ошибку " объект не имеет атрибутных устройств " можете ли вы сослаться на какой-то учебник, который может помочь ... или разработать этот модуль usb – omrihsan

+0

Код работает для меня на Osx с Python 2.6 и pyUsb, установленными с портом. Какова ваша платформа \ Python версия? – systempuntoout

+0

Теперь я установил pyusb и запустил образец usbenum.py (ваш упомянутый код кажется очень похожим) .... У меня есть 3 порта usb на моем ПК, но результаты показывают 6 выходов для dev.filename..they являются номерами как 001 или 005 и т. д .... , и они изменились, когда я подключил устройства ... (я не очень хорошо разбираюсь в стандартах USB) .... Я просто хочу идентифицировать каждое устройство/порт ... какой параметр в пример поможет мне .... – omrihsan

2

@ ответ 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)) 
1

но все, что .. кто-то будет искать ответ в какой-то момент:

Я нахожусь на mac (osx 10.9) .. Я успешно установил libusb с портами mac, но получал сообщение «no backend available». Это потому, что python не может найти dylib usb.

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

Как только я добавлю его, pyusb отлично работает.

+0

Я просто столкнулся с этой проблемой и успешно установил libusb через homebrew: 'brew install libusb' – Thomas

0

Ok я также прибегая к помощи вокруг ответов, вот фрагмент кода, который работает:

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

+0

Обратите внимание, что это будет работать только в окнах – Kev1n91