2013-02-25 41 views
3

我想發送數據到一個USB棒使用python庫PyUSB。我使用的代碼如下:PyUSB dev.set_configuration()

import usb.core 
import usb.util 

# find our devices 
#dev = usb.core.find(idVendor=0xfffe, idProduct=0x0001) 
dev = usb.core.find(idVendor=0x090c, idProduct=0x1000) 

# was it found? 
if dev is None: 
    raise ValueError('Device not found') 

# set the active configuration. With no arguments, the first 
# configuration will be the active one 
dev.set_configuration() 

# get an endpoint instance 
cfg = dev.get_active_configuration() 
interface_number = cfg[(0,0)].bInterface_number 
alternate_setting = usb.control.get_interface(interface_number) 
intf = usb.util.find_descriptor(
    cfg, bTnerfaceNumber = interface_number, 
    bAlternateSettings = alternate_setting 
) 

ep = usb.util.find_descriptor(
    intf, 
    # match the first OUT endpoint 
    custom_match = \ 
    lambda e: 
     usb.util.endpoint_direction(e.bEndpointAddress) == \ 
     usb.util.ENDPOINT_OUT 
) 

assert ep is not None 

# write the data 
ep.write('test') 

但是我似乎得到以下錯誤:

Traceback (most recent call last): 
    File "/home/usman/Desktop/c_code/libusb_test_data/pyusb_code/send_data_rev_one.py", line 14, in <module> 
    dev.set_configuration() 
    File "/usr/local/lib/python2.7/dist-packages/usb/core.py", line 554, in set_configuration 
    self._ctx.managed_set_configuration(self, configuration) 
    File "/usr/local/lib/python2.7/dist-packages/usb/core.py", line 91, in managed_set_configuration 
    self.managed_open() 
    File "/usr/local/lib/python2.7/dist-packages/usb/core.py", line 70, in managed_open 
    self.handle = self.backend.open_device(self.dev) 
    File "/usr/local/lib/python2.7/dist-packages/usb/backend/libusb1.py", line 494, in open_device 
    _check(_lib.libusb_open(dev.devid, byref(handle))) 
    File "/usr/local/lib/python2.7/dist-packages/usb/backend/libusb1.py", line 403, in _check 
    raise USBError(_str_error[ret], ret, _libusb_errno[ret]) 
USBError: [Errno 13] Access denied (insufficient permissions) 

有人可以走路我通過這個錯誤,並告訴我如何解決它

謝謝

+0

USB權限由底層操作系統控制。你在使用Linux還是Windows?如果是Linux,你的工作分佈是什麼?您總是可以嘗試以超級用戶/管理員權限運行您的應用程序,但理想情況下,如果可以的話,您最好避免這種情況。 – Pace 2013-02-26 02:19:42

回答

4

我剛剛從你使用Ubuntu的標籤實現。在Ubuntu中,USB設備權限與USB設備編號綁定。當Ubuntu發佈它時,它對某些標準設備(例如閃存驅動器)具有全局權限,以便非root用戶可以使用這些設備。但是,它不會全局解鎖USB設備,因爲某些USB設備可能有害。請參閱this post以瞭解如何修改Ubuntu配置(特別是/etc/udev/rules.d/40-basic-permissions.rules),以便允許非root用戶使用您的設備。