如何在Colab的Conda环境中实现Python代码实时输出?
在Google Colab的Conda Python 3.6环境中实现实时输出的方法
背景
在Google Colab中安装了Python 3.8,并以此创建Python 3.6的Conda环境(无法直接安装Python 3.6)。目前运行Python 3.6代码有两种方式:
方式一
!conda run -n myEnv python main.py
方式二
%%bash source activate myEnv python
对应的Python示例代码:
import time print("OK") time.sleep(10) print("OK")
但两种方式的输出均存在缓冲问题,无法实时显示——必须等代码完全执行完毕后,才会一次性输出所有结果。比如上述代码会在10秒后同时输出:
OK OK
疑问
- 是否可以让输出直接实时显示在Google Colab中?即先看到第一个
OK,等待10秒后再看到第二个OK。 - 如果上述需求不可行,有没有更优的替代方案实现实时查看输出?比如目前尝试的输出到文件,但需要手动刷新,是否有类似输出到可实时查看的本地页面这类更好的方式?
已尝试的方法(编辑补充)
无效方法
- 配置无缓冲标准输出:
sys.stdout = Unbuffered(sys.stdout) - 运行Python时添加
-u参数:!conda run -n myEnv python -u main.py - 打印时启用强制刷新:
print("OK", flush=True) - 手动调用刷新:
sys.stdout.flush() - 使用
conda run的--live-stream参数:!conda run -n myEnv python main.py --live-stream
有效但体验不佳的方法
重写sys.stdout.write方法,将输出同时写入文件和标准输出:
import sys def mock_write(text): with open("out.txt", "a") as fh: fh.write(text) real_write = type(sys.stdout).write real_write(sys.stdout, text) sys.stdout.write = mock_write
此方法可在代码执行过程中查看out.txt的内容,但需要手动刷新Colab的驱动器页面才能看到更新,操作繁琐。
内容的提问来源于stack exchange,提问作者user3425606
相关产品推荐
相关产品推荐

