使用Python3运行LegoMindstorms EV3代码时print()无法输出到VS Code控制台问题
EV3Dev使用CPython时print无法输出到VS Code终端的解决方案
根因说明
使用#!/usr/bin/env pybricks-micropython作为脚本头部时,解释器默认关闭了标准输出缓冲,print内容会即时发送到VS Code远程终端;而#!/usr/bin/env python3对应的CPython解释器默认启用标准输出缓冲,输出内容会暂存到缓冲区,默认只有程序退出、缓冲区满的时候才会实际输出,因此你无法在VS Code终端看到实时打印内容。
解决方案
你可以任选以下任意一种方案处理:
- 方案1:单条print语句强制刷新
调用print时添加flush=True参数即可即时输出,示例:
无需修改全局配置,适合打印语句较少的场景。print("Hello EV3", flush=True) - 方案2:全局关闭解释器输出缓冲
直接修改脚本头部的shebang为#!/usr/bin/env python3 -u,-u参数会强制CPython解释器关闭标准输入输出的全部缓冲,所有print内容都会即时输出到VS Code终端,不需要修改代码中的任何print语句,适合项目内有大量打印需求的场景。 - 方案3:代码内全局配置输出缓冲
在脚本的起始位置添加以下代码,设置stdout为行缓冲模式,每行print内容都会自动刷新输出:
无需修改shebang,也不需要调整后续的print语句,兼容性更强。import sys sys.stdout.reconfigure(line_buffering=True)
以上方案均不会影响打印内容在EV3设备屏幕的显示,也不会影响第三方库的导入调用。
内容的提问来源于stack exchange,提问作者Tim0710h
相关产品推荐
相关产品推荐

