You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python程序运行时USB串口断开的最优处理方法是什么

实现USB串口断开自动触发回调的两种方案
  • 方案1:守护线程轮询(实现最简单,跨平台可用)
    你可以在串口打开后启动一个后台守护线程,定期检测串口状态和设备文件存在性,触发条件后自动调用回调函数,示例代码如下:
    import threading
    import os
    import time
    
    # 串口监听逻辑
    def _serial_watchdog(self):
        while self._serial.is_open:
            # USB断开后/dev下的设备文件会消失,同时is_open属性会变为False
            if not os.path.exists(self._port) or not self._serial.is_open:
                self.disconnectHandler()
                # 回调执行后关闭串口、结束线程
                if self._serial.is_open:
                    self._serial.close()
                break
            time.sleep(0.3) # 可根据需求调整检测间隔,单位为秒
    
    串口初始化完成后启动线程即可:
    self._serial = serial.Serial(self._serialPort, 9600, timeout=1)
    # daemon=True保证主程序退出时线程会自动销毁
    threading.Thread(target=self._serial_watchdog, daemon=True).start()
    
  • 方案2:系统设备事件监听(无轮询延迟,macOS专属)
    如果需要更低的触发延迟,你可以调用macOS原生IOKit框架监听USB设备移除事件,匹配到对应串口设备路径时直接触发回调,需要提前安装依赖pip install pyobjc-framework-IOKit,监听逻辑只需要注册一次,不需要循环轮询,性能损耗更低。

注意事项:如果disconnectHandler()内需要操作UI或者其他线程不安全的资源,要自行加锁或者把逻辑抛到主线程执行,避免出现并发问题。

内容的提问来源于stack exchange,提问作者jonas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 02:36:03