PyUSB มีปัญหากับ windows
Pyusb ทำงานไม่ถูกต้องกับพีซีของฉัน ไม่มีหัวข้อใด ๆ เกี่ยวกับปัญหาของฉันในฟอรัมนี้ รายละเอียดด้านล่าง. ฉันกำลังพยายามเรียกใช้สคริปต์ง่ายๆที่ควรแสดงข้อมูลอุปกรณ์ USB:
import usb.core
import usb.util
for device in usb.core.find(find_all=True):
print(device)
และหลังจากนั้นฉันได้รับ 2 ข้อผิดพลาด: usb.core.USBError: [Errno 2] ไม่พบเอนทิตีและNotImplementedError: การดำเนินการไม่ได้รับการสนับสนุนหรือไม่ได้ใช้งานบนแพลตฟอร์มนี้
บันทึก
DEVICE ID 8087:8008 on Bus 001 Address 003 =================
bLength : 0x12 (18 bytes)
bDescriptorType : 0x1 Device
bcdUSB : 0x200 USB 2.0
bDeviceClass : 0x9 Hub
bDeviceSubClass : 0x0
bDeviceProtocol : 0x1
bMaxPacketSize0 : 0x40 (64 bytes)
idVendor : 0x8087
idProduct : 0x8008
bcdDevice : 0x5 Device 0.05
iManufacturer : 0x0
iProduct : 0x0
iSerialNumber : 0x0
bNumConfigurations : 0x1
CONFIGURATION 1: 0 mA ====================================
bLength : 0x9 (9 bytes)
bDescriptorType : 0x2 Configuration
wTotalLength : 0x19 (25 bytes)
bNumInterfaces : 0x1
bConfigurationValue : 0x1
iConfiguration : 0x0
bmAttributes : 0xe0 Self Powered, Remote Wakeup
bMaxPower : 0x0 (0 mA)
INTERFACE 0: Hub =======================================
bLength : 0x9 (9 bytes)
bDescriptorType : 0x4 Interface
bInterfaceNumber : 0x0
bAlternateSetting : 0x0
bNumEndpoints : 0x1
bInterfaceClass : 0x9 Hub
bInterfaceSubClass : 0x0
bInterfaceProtocol : 0x0
iInterface : 0x0
ENDPOINT 0x81: Interrupt IN ==========================
bLength : 0x7 (7 bytes)
bDescriptorType : 0x5 Endpoint
bEndpointAddress : 0x81 IN
bmAttributes : 0x3 Interrupt
wMaxPacketSize : 0x1 (1 bytes)
bInterval : 0xc
DEVICE ID 1c4f:0026 on Bus 003 Address 001 =================
bLength : 0x12 (18 bytes)
bDescriptorType : 0x1 Device
bcdUSB : 0x110 USB 1.1
bDeviceClass : 0x0 Specified at interface
bDeviceSubClass : 0x0
bDeviceProtocol : 0x0
bMaxPacketSize0 : 0x8 (8 bytes)
idVendor : 0x1c4f
idProduct : 0x0026
bcdDevice : 0x110 Device 1.1
iManufacturer : 0x1 Error Accessing String
iProduct : 0x2 Error Accessing String
iSerialNumber : 0x0
bNumConfigurations : 0x1
CONFIGURATION 1: 98 mA ===================================
bLength : 0x9 (9 bytes)
bDescriptorType : 0x2 Configuration
wTotalLength : 0x3b (59 bytes)
bNumInterfaces : 0x2
bConfigurationValue : 0x1
iConfiguration : 0x0
bmAttributes : 0xa0 Bus Powered, Remote Wakeup
bMaxPower : 0x31 (98 mA)
INTERFACE 0: Human Interface Device ====================
bLength : 0x9 (9 bytes)
bDescriptorType : 0x4 Interface
bInterfaceNumber : 0x0
bAlternateSetting : 0x0
bNumEndpoints : 0x1
bInterfaceClass : 0x3 Human Interface Device
bInterfaceSubClass : 0x1
bInterfaceProtocol : 0x1
iInterface : 0x0
ENDPOINT 0x81: Interrupt IN ==========================
bLength : 0x7 (7 bytes)
bDescriptorType : 0x5 Endpoint
bEndpointAddress : 0x81 IN
bmAttributes : 0x3 Interrupt
wMaxPacketSize : 0x8 (8 bytes)
bInterval : 0xa
INTERFACE 1: Human Interface Device ====================
bLength : 0x9 (9 bytes)
bDescriptorType : 0x4 Interface
bInterfaceNumber : 0x1
bAlternateSetting : 0x0
bNumEndpoints : 0x1
bInterfaceClass : 0x3 Human Interface Device
bInterfaceSubClass : 0x0
bInterfaceProtocol : 0x0
iInterface : 0x0
ENDPOINT 0x82: Interrupt IN ==========================
bLength : 0x7 (7 bytes)
bDescriptorType : 0x5 Endpoint
bEndpointAddress : 0x82 IN
bmAttributes : 0x3 Interrupt
wMaxPacketSize : 0x3 (3 bytes)
bInterval : 0xa
Traceback (most recent call last):
File "f:\newpy\venv\lib\site-packages\usb\core.py", line 746, in __str__
for configuration in self:
File "f:\newpy\venv\lib\site-packages\usb\core.py", line 1128, in __iter__
yield Configuration(self, i)
File "f:\newpy\venv\lib\site-packages\usb\core.py", line 603, in __init__
desc = backend.get_configuration_descriptor(
File "f:\newpy\venv\lib\site-packages\usb\backend\libusb1.py", line 773, in get_configuration_descriptor
_check(self.lib.libusb_get_config_descriptor(
File "f:\newpy\venv\lib\site-packages\usb\backend\libusb1.py", line 604, in _check
raise USBError(_strerror(ret), ret, _libusb_errno[ret])
usb.core.USBError: [Errno 2] Entity not found
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "usbtesta.py", line 31, in <module>
print(device)
File "f:\newpy\venv\lib\site-packages\usb\core.py", line 750, in __str__
configuration = self.get_active_configuration()
File "f:\newpy\venv\lib\site-packages\usb\core.py", line 909, in get_active_configuration
return self._ctx.get_active_configuration(self)
File "f:\newpy\venv\lib\site-packages\usb\core.py", line 113, in wrapper
return f(self, *args, **kwargs)
File "f:\newpy\venv\lib\site-packages\usb\core.py", line 247, in get_active_configuration
self.managed_open()
File "f:\newpy\venv\lib\site-packages\usb\core.py", line 113, in wrapper
return f(self, *args, **kwargs)
File "f:\newpy\venv\lib\site-packages\usb\core.py", line 131, in managed_open
self.handle = self.backend.open_device(self.dev)
File "f:\newpy\venv\lib\site-packages\usb\backend\libusb1.py", line 804, in open_device
return _DeviceHandle(dev)
File "f:\newpy\venv\lib\site-packages\usb\backend\libusb1.py", line 652, in __init__
_check(_lib.libusb_open(self.devid, byref(self.handle)))
File "f:\newpy\venv\lib\site-packages\usb\backend\libusb1.py", line 600, in _check
raise NotImplementedError(_strerror(ret))
NotImplementedError: Operation not supported or unimplemented on this platform
ฉันพบปัญหาที่คล้ายกันบนอินเทอร์เน็ต แต่มีปัญหาในการทำงานกับอุปกรณ์ USB เฉพาะและแก้ไขได้โดยการติดตั้ง Zadig และเลือกไดรเวอร์ที่เหมาะสม วิธีนั้นไม่ได้ช่วยฉันเพราะฉันไม่ได้ทำงานกับอุปกรณ์ USB บางอย่าง แต่มีเฉพาะรหัสที่พยายามดูรายการอุปกรณ์ ปัญหาไม่ได้อยู่ใน PATH ฉันพยายามเรียกใช้สคริปต์ของฉันด้วยการกำหนดค่าถัดไป: win10, python 3.8.5 และ 3.7.9, pyusb 1.1.0, libusb 1.0.23b1 / libusb-win32 ถ้าฉันรันสคริปต์ด้วย libusb-win32 (libusb0.dll) ไม่มีอะไรเกิดขึ้น python จะส่งคืนบรรทัดว่างและรอคำสั่งใหม่ หากฉันเรียกใช้สคริปต์ด้วย libusb python จะแสดงข้อผิดพลาดข้างต้นในโพสต์นี้ ข้อผิดพลาดแรกหายไปเมื่อฉันเพิ่มในบรรทัดสคริปต์ set_configuration ()
for device in usb.core.find(find_all=True):
print(device)
device.set_configuration()
แต่จะแก้ไขข้อผิดพลาดที่สองได้อย่างไร? ในการกำหนดค่าเดียวกันบน mac os (pyusb, libusb 1.0, python 3.7.9) สคริปต์นี้ทำงานสำเร็จ
แปลก แต่สคริปต์นี้ทำงานได้สำเร็จ:
for device in usb.core.find(find_all=True):
print(device.bDeviceClass) # running only if i indicate parameter of variable "device" like here
นอกจากนี้ยังแปลกที่ pyusb พบอุปกรณ์ USB บางอย่าง (ดังที่คุณเห็นในบันทึก) แต่สุดท้ายข้อผิดพลาดปรากฏขึ้น ในพีซีเครื่องอื่นสคริปต์ของฉันไม่ทำงานเลยข้อผิดพลาดจะปรากฏขึ้นทันทีหลังจากเริ่มต้น ฉันจะดูรายการอุปกรณ์ที่เชื่อมต่อได้อย่างไร ฉันดีใจที่ได้รับความช่วยเหลือ
คำตอบ
import sys
import ctypes as ct
import libusb as usb
def print_devs(devs):
path = (ct.c_uint8 * 8)()
i = 0
while devs[i]:
dev = devs[i]
desc = usb.device_descriptor()
r = usb.get_device_descriptor(dev, ct.byref(desc))
if r < 0:
print("failed to get device descriptor", file=sys.stderr)
return
print("{:04x}:{:04x} (bus {:d}, device {:d})".format(
desc.idVendor, desc.idProduct,
usb.get_bus_number(dev), usb.get_device_address(dev)), end="")
r = usb.get_port_numbers(dev, path, ct.sizeof(path))
if r > 0:
print(" path: {:d}".format(path[0]), end="")
for j in range(1, r):
print(".{:d}".format(path[j]), end="")
print()
i += 1
def main():
r = usb.init(None)
if r < 0:
return r
try:
devs = ct.POINTER(ct.POINTER(usb.device))()
cnt = usb.get_device_list(None, ct.byref(devs))
if cnt < 0:
return cnt
print_devs(devs)
usb.free_device_list(devs, 1)
finally:
usb.exit(None)
return 0
sys.exit(main() or 0)