当前位置:首页>python>深入解析PyUSB:用Python轻松操控USB设备

深入解析PyUSB:用Python轻松操控USB设备

  • 2026-07-02 16:36:19
深入解析PyUSB:用Python轻松操控USB设备

点击蓝字

关注我们

引言:为什么需要 PyUSB?

在嵌入式系统、工业自动化、物联网(IoT)以及硬件交互开发中,与USB设备通信是一项常见但技术门槛较高的任务。传统上,开发者需使用 C/C++ 编写底层驱动或调用操作系统特定的 API(如 Windows 的 WinUSB、Linux 的 libusb),不仅代码复杂,还缺乏跨平台能力。

而 PyUSB 的出现,彻底改变了这一局面。作为 Python 生态中用于 USB 通信的核心库,PyUSB 提供了一套简洁、统一、跨平台的接口,让开发者无需深入操作系统内核,即可通过几行 Python 代码读写 USB 设备、控制端点、枚举设备信息,甚至实现自定义 HID(人机接口设备)或 CDC(通信设备类)协议。

本文将从基础概念、安装配置、核心 API、实战案例、调试技巧到高级应用,系统性地介绍 PyUSB,帮助你掌握如何用 Python 高效、安全地与 USB 设备交互。无论你是想读取 USB 温度传感器、控制 LED 灯带,还是开发自己的 USB 外设固件测试工具,PyUSB 都是你不可或缺的利器。

一、USB 基础知识回顾

在深入 PyUSB 之前,有必要简要了解 USB 协议的基本结构,这有助于理解后续的代码逻辑。

1.1 USB 设备层级模型

一个 USB 设备由以下逻辑单元组成:

设备(Device):物理 USB 设备本身,具有唯一的 Vendor ID(VID)和 Product ID(PID)。

配置(Configuration):一个设备可有多个配置(通常为1),描述供电、接口数量等。

接口(Interface):功能单元,如一个 USB 音频设备可能包含“麦克风”和“扬声器”两个接口。

端点(Endpoint):数据传输的终点。分四种类型:

a.Control(控制):用于设备配置和状态查询(端点0,双向);

b.Bulk(批量):高可靠、低实时性,如打印机、存储设备;

c.Interrupt(中断):低延迟、小数据量,如键盘、鼠标;

d.Isochronous(同步):高带宽、容忍丢包,如摄像头、音频流。

注意:PyUSB 主要操作 端点 来进行数据收发。

1.2 标准请求与 Class 规范

USB 协议定义了标准设备请求(如 GET_DESCRIPTOR、SET_CONFIGURATION),同时也允许厂商自定义命令。此外,USB-IF制定了多种设备类(Device Class) 规范,如:

HID(Human Interface Device):键盘、鼠标、游戏手柄;

CDC(Communication Device Class):虚拟串口(如 Arduino);

MSC(Mass Storage Class):U 盘;

DFU(Device Firmware Upgrade):固件升级。

PyUSB 不依赖这些高层协议,它工作在传输层,因此适用于任何 USB 设备——包括没有标准驱动的“裸设备”。

二、PyUSB 安装与环境配置

2.1 安装 PyUSB

PyUSB 是纯 Python 库,但依赖底层 USB 后端(backend)。安装命令如下:

pip install pyusb

注意:PyUSB 本身不包含后端实现,需额外安装支持库。

2.2 后端选择与配置

PyUSB 支持三种主流后端:

推荐使用 libusb1,因其跨平台性好、维护活跃。

Windows用户特别说明:

●下载 libusb-1.0.dll

●将DLL文件放入C:\Windows\System32或Python脚本同目录

●或使用 Zadig 工具为设备安装WinUSB驱动(关键步骤!)

注意:若未正确安装驱动,Windows 会阻止用户态程序访问 USB 设备,报错 Access denied 或 No backend available

Linux 用户权限问题:

默认情况下,普通用户无权访问 /dev/bus/usb/*

解决方法:

# 创建 udev 规则(以 VID=0x1234, PID=0x5678 为例)echo 'SUBSYSTEM=="usb", ATTR{idVendor}=="1234", ATTR{idProduct}=="5678", MODE="0666"' | sudo tee /etc/udev/rules.d/99-myusb.rulessudo udevadm control --reload-rules && sudo udevadm trigger

三、PyUSB 核心 API 详解

PyUSB 的设计哲学是“简单即强大”。其核心模块为 usb.core 和 usb.util

3.1 枚举与查找设备

使用 usb.core.find() 查找设备:

import usb.coreimport usb.util# 方法1:通过 VID/PID 查找dev = usb.core.find(idVendor=0x1234, idProduct=0x5678)# 方法2:查找所有设备devices = usb.core.find(find_all=True)# 方法3:自定义查找函数def my_filter(dev):    return dev.idVendor == 0x1234and dev.manufacturer == "MyCompany"dev = usb.core.find(custom_match=my_filter)

若未找到,返回 None;若找到多个且未用 find_all=True,抛出 ValueError

3.2 设备信息获取

一旦获得 dev 对象(usb.core.Device 实例),可读取其描述符:

print(f"Manufacturer: {usb.util.get_string(dev, dev.iManufacturer)}")print(f"Product: {usb.util.get_string(dev, dev.iProduct)}")print(f"Serial: {usb.util.get_string(dev, dev.iSerialNumber)}")# 打印所有配置for cfg in dev:    print(f"Config {cfg.bConfigurationValue}")    for intf in cfg:        print(f"  Interface {intf.bInterfaceNumber}{intf.bNumEndpoints} endpoints")        for ep in intf:            print(f"    EP {ep.bEndpointAddress:02x} ({'IN'if ep.bEndpointAddress & 0x80else'OUT'}), Type: {ep.bmAttributes & 0x03}")

注意:字符串描述符需通过 usb.util.get_string() 解码,直接访问 dev.iProduct 返回的是索引。

3.3 声明接口与释放内核驱动

在Linux/macOS上,若设备已被系统驱动占用(如 HID  键盘被内核接管),需先分离内核驱动

if dev.is_kernel_driver_active(0):  # 接口0    dev.detach_kernel_driver(0)

操作完成后,应重新附加驱动(良好实践):

dev.attach_kernel_driver(0)

Windows通常无需此步骤(因使用 WinUSB 驱动时内核未接管)。

3.4 设置配置与声明接口

大多数设备只需使用默认配置:

dev.set_configuration()  # 使用第一个配置cfg = dev.get_active_configuration()intf = cfg[(00)]       # 获取接口0,备用设置0

3.5 端点通信:读写数据

写数据(OUT 端点):

# 假设端点地址为 0x01(OUT)ep_out = usb.util.find_descriptor(intf, custom_match=lambda e: \    usb.util.endpoint_direction(e.bEndpointAddress) == usb.util.ENDPOINT_OUT)if ep_out:    data = b'\x01\x02\x03\x04'    bytes_written = dev.write(ep_out.bEndpointAddress, data, timeout=1000)    print(f"Sent {bytes_written} bytes")

读数据(IN 端点):

# 假设端点地址为 0x81(IN)ep_in = usb.util.find_descriptor(intf, custom_match=lambda e: \    usb.util.endpoint_direction(e.bEndpointAddress) == usb.util.ENDPOINT_IN)if ep_in:    try:        data = dev.read(ep_in.bEndpointAddress, ep_in.wMaxPacketSize, timeout=1000)        print(f"Received: {data}")    except usb.core.USBError as e:        if e.errno == 110:  # 超时            print("Read timeout")

关键参数:

timeout:单位毫秒,避免无限阻塞;

wMaxPacketSize:端点最大包长,可作为读缓冲区大小。

四、实战案例:与自定义USB设备通信

假设我们有一个基于 STM32 的 USB CDC 设备(虚拟串口),但希望绕过操作系统串口驱动,直接通过 PyUSB 控制。

4.1 设备信息分析

首先,用 lsusb -v(Linux)或 USBTreeView(Windows)查看设备描述符:

Bus 001 Device 005: ID 0483:5740 STMicroelectronics Virtual COM PortDevice Descriptor:  bcdUSB               2.00  bDeviceClass          2 Communications  bDeviceSubClass       0  bDeviceProtocol       0  idVendor           0x0483 STMicroelectronics  idProduct          0x5740 Virtual COM Port  ...  Interface Descriptor:    bInterfaceNumber     0    bInterfaceClass      2 Communications    bInterfaceSubClass   2 Abstract (modem)    bInterfaceProtocol   1 AT-commands (v.25ter)    Endpoint Descriptor:      bEndpointAddress     0x81  EP 1 IN      bmAttributes            3        Transfer Type            Interrupt      wMaxPacketSize     0x0008    Endpoint Descriptor:      bEndpointAddress     0x01  EP 1 OUT      bmAttributes            2        Transfer Type            Bulk

可见,该设备有两个端点:0x81(IN,中断)、0x01(OUT,批量)。

4.2 编写通信脚本

import usb.coreimport usb.utilimport sys# 查找设备dev = usb.core.find(idVendor=0x0483, idProduct=0x5740)if dev is None:    raise ValueError('Device not found')# 分离内核驱动(Linux/macOS)if sys.platform != "win32":    if dev.is_kernel_driver_active(0):        dev.detach_kernel_driver(0)# 设置配置dev.set_configuration()# 获取接口cfg = dev.get_active_configuration()intf = cfg[(00)]# 查找端点ep_out = usb.util.find_descriptor(    intf,    custom_match=lambda e: usb.util.endpoint_direction(e.bEndpointAddress) == usb.util.ENDPOINT_OUT)ep_in = usb.util.find_descriptor(    intf,    custom_match=lambda e: usb.util.endpoint_direction(e.bEndpointAddress) == usb.util.ENDPOINT_IN)ifnot ep_out ornot ep_in:    raise ValueError("Endpoints not found")# 发送 AT 命令command = b"AT\r\n"dev.write(ep_out.bEndpointAddress, command, timeout=1000)# 读取响应try:    response = dev.read(ep_in.bEndpointAddress, 64, timeout=1000)    print("Response:", response.tobytes().decode('utf-8', errors='replace'))except usb.core.USBError as e:    print("Read error:", e)

运行结果可能为:

Response: ATOK

此例展示了如何绕过 pyserial,直接与 CDC 设备通信,适用于需要低延迟或自定义协议的场景。

五、常见问题与调试技巧

5.1 “No backend available” 错误

原因:未安装 libusb 或 DLL 未找到。

解决:

●Linux:sudo apt install libusb-1.0-0-dev

●Windows:将 libusb-1.0.dll 放入 PATH 或脚本目录;

●指定后端:usb.core.find(backend=usb.backend.libusb1.get_backend())

5.2 “Access denied” 或

 “Operation not permitted”

●Linux:检查 udev 规则,确保用户有权限;

●Windows:用 Zadig 为设备安装 WinUSB 驱动(替换原有驱动);

●macOS:可能需要禁用 SIP 或使用 IOKit 后端(较少见)。

5.3 读写超时或无响应

●检查端点方向是否正确(IN/OUT);

●确认设备固件是否处于接收状态;

●增加 timeout 值;

●使用 USB 协议分析仪(如 Wireshark + USBPcap)抓包验证。

5.4 设备被系统占用

●在Windows上,HID 设备常被hidusb.sys占用,需用 Zadig 替换为 WinUSB;

●在Linux上,使用 detach_kernel_driver()

六、高级应用:构建USB测试框架

PyUSB 可用于自动化测试嵌入式设备的 USB 功能。例如,验证设备在不同命令下的响应:

classUSBDeviceTester:    def __init__(self, vid, pid):        self.dev = usb.core.find(idVendor=vid, idProduct=pid)        assert self.dev, "Device not found"        self.dev.set_configuration()        self._setup_endpoints()    def _setup_endpoints(self):        cfg = self.dev.get_active_configuration()        intf = cfg[(00)]        self.ep_out = ...  # find OUT        self.ep_in = ...   # find IN    def send_command(self, cmd: bytes) -> bytes:        self.dev.write(self.ep_out.bEndpointAddress, cmd, timeout=2000)        return self.dev.read(self.ep_in.bEndpointAddress, 256, timeout=2000).tobytes()    def test_led_on(self):        resp = self.send_command(b"LED ON\n")        assert b"OK" in resp, "LED ON failed"    def test_temperature(self):        resp = self.send_command(b"TEMP?\n")        temp = float(resp.strip())        assert 20 <= temp <= 30f"Invalid temperature: {temp}"

此类框架可集成到 CI/CD 流程中,实现硬件回归测试。

七、PyUSB与其他库的对比

结论:PyUSB 是通用 USB 通信的首选。

结语:让Python成为你的USB开发利器

PyUSB 以极简的 API 封装了复杂的 USB 通信细节,使 Python 开发者能够轻松进入硬件交互领域。无论是快速原型验证、自动化测试,还是构建跨平台的设备管理工具,PyUSB 都提供了强大而可靠的支持。

然而,能力越大,责任越大。直接操作 USB 设备意味着你需要理解端点、传输类型、描述符等概念,并谨慎处理权限与资源释放。建议在开发中始终遵循:

1、先枚举,再操作;

2、及时释放内核驱动;

3、设置合理超时;

4、异常处理全覆盖。

最后,记住:最好的 USB 代码,是那些即使设备拔掉也不会崩溃的代码

E n d

链接:https://blog.csdn.net/liaoqingjian/article/details/156598873?spm=1001.2014.3001.5502

本文为51Testing经授权转载,转载文章所包含的文字来源于作者。如因内容或版权等问题,请联系51Testing进行删除。

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-07-03 10:54:44 HTTP/2.0 GET : https://f.mffb.com.cn/a/495029.html
  2. 运行时间 : 0.117129s [ 吞吐率:8.54req/s ] 内存消耗:4,786.16kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=843f8a7e48e710bbd0394a449535be2d
  1. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/runtime/temp/067d451b9a0c665040f3f1bdd3293d68.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000695s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000890s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000339s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000281s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000500s ]
  6. SELECT * FROM `set` [ RunTime:0.000199s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000588s ]
  8. SELECT * FROM `article` WHERE `id` = 495029 LIMIT 1 [ RunTime:0.000728s ]
  9. UPDATE `article` SET `lasttime` = 1783047284 WHERE `id` = 495029 [ RunTime:0.028206s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.010865s ]
  11. SELECT * FROM `article` WHERE `id` < 495029 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000630s ]
  12. SELECT * FROM `article` WHERE `id` > 495029 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.002762s ]
  13. SELECT * FROM `article` WHERE `id` < 495029 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.000719s ]
  14. SELECT * FROM `article` WHERE `id` < 495029 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.000985s ]
  15. SELECT * FROM `article` WHERE `id` < 495029 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.000858s ]
0.118729s