PyUSB rắc rối với cửa sổ
Pyusb hoạt động không chính xác với PC của tôi. Không có bất kỳ chủ đề nào về vấn đề của tôi trên diễn đàn này. Chi tiết bên dưới. Tôi đang cố chạy một tập lệnh đơn giản hiển thị thông tin thiết bị USB:
import usb.core
import usb.util
for device in usb.core.find(find_all=True):
print(device)
Và sau đó tôi nhận được 2 lỗi: usb.core.USBError: [Errno 2] Không tìm thấy thực thể và NotImplementedError: Hoạt động không được hỗ trợ hoặc chưa thực hiện trên nền tảng này
khúc gỗ
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
Tôi đã thấy một vấn đề tương tự trên internet nhưng có một sự cố khi làm việc với một thiết bị USB cụ thể và nó đã được giải quyết bằng cách cài đặt Zadig và chọn trình điều khiển phù hợp. Cách đó không giúp được tôi vì tôi không làm việc với một số thiết bị USB mà chỉ với mã đang cố gắng xem danh sách thiết bị. Vấn đề không nằm ở PATH. Tôi đã cố gắng chạy tập lệnh của mình với cấu hình tiếp theo: win10, python 3.8.5 và 3.7.9, pyusb 1.1.0, libusb 1.0.23b1 / libusb-win32. Nếu tôi chạy tập lệnh với libusb-win32 (libusb0.dll) thì không có gì xảy ra, python chỉ trả về một dòng trống và đợi lệnh mới. Nếu tôi chạy một tập lệnh với libusb, python sẽ hiển thị những lỗi đó ở trên trong bài đăng này. Lỗi đầu tiên biến mất khi tôi thêm vào dòng script set_configuration ()
for device in usb.core.find(find_all=True):
print(device)
device.set_configuration()
Nhưng làm thế nào để sửa lỗi thứ hai? Trong cùng một cấu hình trên mac os (pyusb, libusb 1.0, python 3.7.9) tập lệnh này chạy thành công
Thật kỳ lạ, nhưng tập lệnh này đang chạy thành công:
for device in usb.core.find(find_all=True):
print(device.bDeviceClass) # running only if i indicate parameter of variable "device" like here
Cũng lạ là pyusb tìm thấy một số thiết bị USB (như bạn có thể thấy trong nhật ký) nhưng cuối cùng, lại xuất hiện lỗi. Trên một PC khác, tập lệnh của tôi hoàn toàn không chạy, lỗi xuất hiện ngay sau khi bắt đầu. Vậy làm cách nào để có thể xem danh sách các thiết bị đã kết nối? Tôi rất vui khi được giúp đỡ
Trả lời
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)