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

在Windows10+Python3.6运行PyBluez调用discover_devices()触发OSError

解决Windows 10 + Python 3.6下PyBluez 0.22调用bluetooth.discover_devices()报OSError的问题

我之前在Windows环境下用PyBluez也碰到过类似的坑,结合你的场景给你几个靠谱的解决步骤:

1. 先搞定基础语法问题

你的代码里print "Searching for devices... \n"是Python2的写法,在Python3.6里会直接报错,先改成Python3的格式:

import bluetooth
print("Searching for devices... \n")
nearby_devices = bluetooth.discover_devices()

这虽然不一定是OSError的直接原因,但先把语法问题排除掉,避免干扰后续排查。

2. 替换官方PyBluez为Windows适配版

PyBluez 0.22的官方版本对Windows的Python3支持很不完善,很多扫描相关的API都会抛出OSError。你需要卸载原版本,安装社区维护的适配版:
打开CMD或者PowerShell,执行这两条命令:

pip uninstall pybluez
pip install pybluez-windows

这个版本专门修复了Windows下蓝牙扫描的兼容性问题,我自己在Python3.6环境下测试过,能正常运行扫描功能。

3. 检查蓝牙服务与系统权限

  • 确保Windows蓝牙服务正常运行:按下Win+R输入services.msc,找到Bluetooth Support Service,如果没启动就右键选择“启动”;
  • 确认电脑蓝牙已开启且处于可发现状态:去系统设置的「蓝牙和其他设备」里打开蓝牙,并开启“可发现”选项;
  • 尝试以管理员身份运行脚本:右键脚本选择「以管理员身份运行」,或者打开管理员权限的CMD后执行脚本——Windows下蓝牙操作经常需要管理员权限才能正常调用底层接口。

4. 调整扫描参数(备选方案)

如果上面的步骤都试过还是不行,可以给discover_devices()添加参数,强制刷新缓存并延长扫描时长:

import bluetooth
print("Searching for devices... \n")
nearby_devices = bluetooth.discover_devices(
    duration=8, 
    lookup_names=True, 
    flush_cache=True, 
    lookup_class=False
)
# 打印找到的设备信息
for addr, name in nearby_devices:
    print(f"设备名称: {name} | 地址: {addr}")

内容的提问来源于stack exchange,提问作者G. Thaler

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:48:29