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

如何让Jupyter Notebook的print输出同时展示在Shell和单元格

解决Jupyter Notebook print输出同时展示在Shell和单元格的方案

问题原因

你当前的配置直接将sys.stdout重定向到了文件描述符1(对应Shell的标准输出),覆盖了Jupyter自身绑定的stdout捕获对象,因此Jupyter无法捕获打印内容展示在单元格中。

解决方案

替换你~/.ipython/profile_default/startup路径下的启动代码,使用自定义的双输出流实现同时写入两个目标:

import sys

class DualStdout:
    def __init__(self, jupyter_stdout, shell_stdout):
        self.jupyter_stdout = jupyter_stdout
        self.shell_stdout = shell_stdout
    
    def write(self, data):
        self.jupyter_stdout.write(data)
        self.shell_stdout.write(data)
        self.flush()
    
    def flush(self):
        self.jupyter_stdout.flush()
        self.shell_stdout.flush()

# 保留原Jupyter stdout的同时绑定Shell stdout
sys.stdout = DualStdout(sys.stdout, open(1, 'w', buffering=1))

注意事项

  • 若需要stderr内容也同时输出到两处,可按照相同逻辑对sys.stderr做重定向处理
  • 代码中buffering=1设置为行缓冲,可保证输出实时刷新,避免内容堆积在缓冲区不显示
  • 配置修改完成后重启Jupyter Notebook即可生效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 22:48:02