i am using python on ubuntu 9.04
say i have two usb devices connected to a single PC. how can i identify the devices in python code.....for example like
if usb port id == A
write data to device 1
if usb port id == B
write data to device 2
any ideas....
Have you tried pyUsb?
Here a snippet of what you can do:
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 a good tutorial of pyUsb.
For more documentation, use Python interactive mode with dir() and help().
@systempuntoout's answer is nice but today I have found an easier way to find or iterate over all devices: usb.core.find(find_all=True)
Following with your example:
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))
but whatever.. someone will look for the answer at some point:
I'm on a mac (osx 10.9).. I successfully installed libusb with mac ports, but was getting the "no backend available" message. It's because python can't find the usb dylibs.
You have to add the path to your libusb to your $DYLD_LIBRARY_PATH (e.g. /opt/local/lib wherever your macport installed it).
As soon I as I added it, pyusb worked fine.
Ok i was also googling around for answers, here is snippet that works:
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
taken from https://mail.python.org/pipermail/python-win32/2006-December/005406.html