在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
相关产品推荐
相关产品推荐

