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

Jupyter Notebook如何实现单元格输出内容实时保存到文件

Jupyter Notebook单元格输出实时保存到文件的可行方案

核心问题说明

你之前用到的%%capture默认会将单元格所有输出缓存到内存中,等单元格执行完成后才会统一导出,因此无法满足训练过程中实时查看日志的需求。所有实时写入方案的核心都是强制每次输出后立即刷新IO缓冲区,避免内容停留在内存中不写入磁盘。

方案1:通用实时重定向(无额外依赖)

无需安装任何第三方库,直接通过替换标准输出实现双路输出(同时打印到控制台+写入文件):

import sys

class RealTimeLogger:
    def __init__(self, log_path):
        self.terminal = sys.stdout
        # 追加模式写入,多次运行不会覆盖历史日志
        self.log_file = open(log_path, "a", encoding="utf-8")
    
    def write(self, message):
        self.terminal.write(message)
        self.log_file.write(message)
        # 立即刷新缓冲区,保证内容实时写入磁盘
        self.log_file.flush()
    
    def flush(self):
        self.terminal.flush()
        self.log_file.flush()

# 启动实时日志记录,输出会同步写入training_log.txt
sys.stdout = RealTimeLogger("training_log.txt")
  • 在运行训练代码的单元格开头执行上述代码即可,后续所有print输出、深度学习框架打印的训练指标都会实时写入指定文件
  • 训练结束后可执行sys.stdout = sys.__stdout__恢复默认输出,避免影响其他单元格运行

方案2:自定义单元格魔法命令(复用性更高)

如果需要频繁使用该功能,可以一次注册自定义魔法命令,后续所有单元格都可以直接调用:

from IPython.core.magic import register_cell_magic
import sys

@register_cell_magic
def realtime_log(line, cell):
    log_path = line.strip()
    original_stdout = sys.stdout
    logger = RealTimeLogger(log_path)
    sys.stdout = logger
    try:
        exec(cell, globals())
    finally:
        # 单元格执行完成后自动恢复默认输出、关闭日志文件
        sys.stdout = original_stdout
        logger.log_file.close()

用法:

  • 先运行上述代码完成魔法命令注册
  • 后续需要保存输出的单元格第一行写%%realtime_log 你的日志文件名.log即可,单元格内所有输出会自动实时写入文件

训练场景额外优化

如果是PyTorch、TensorFlow等框架的训练任务,也可以直接在训练逻辑中嵌入实时写日志的逻辑,和上述方法效果一致:

# PyTorch训练循环示例
log_file = open("train_metric.log", "a", encoding="utf-8")
for epoch in range(100):
    # 此处省略训练、损失计算逻辑
    train_loss = 0.123
    log_str = f"Epoch {epoch+1}, Train Loss: {train_loss:.4f}\n"
    print(log_str, end="")
    log_file.write(log_str)
    log_file.flush() # 实时写入磁盘

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 03:57:01