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

Python中如何将print函数的输出内容存入变量并作为函数返回值

Python捕获函数print输出作为返回值方案

不需要修改原有打印逻辑的前提下,有两种常用的实现方式:

方法1:使用contextlib内置重定向工具(Python 3.4+ 推荐)

利用Python标准库自带的redirect_stdout上下文管理器,临时将print输出重定向到内存缓冲区,执行完成后读取缓冲区内容即可。

from contextlib import redirect_stdout
from io import StringIO

# 原函数完全不需要修改
def printer():
    print("Statement 1")
    print("Statement 2")

# 封装捕获逻辑的工具函数
def capture_print_output(func):
    output_buffer = StringIO()
    with redirect_stdout(output_buffer):
        func()
    # 返回所有print输出的完整内容,保留原格式换行
    return output_buffer.getvalue()

# 调用示例
result = capture_print_output(printer)
print(result)

方法2:手动替换标准输出(兼容所有Python版本)

如果使用的Python版本低于3.4,可以手动替换sys.stdout实现同样效果,记得执行完成后恢复原标准输出,避免影响后续代码的打印逻辑。

import sys
from io import StringIO

def capture_print_output(func):
    # 先保存原有标准输出对象
    original_stdout = sys.stdout
    try:
        output_buffer = StringIO()
        sys.stdout = output_buffer
        func()
        return output_buffer.getvalue()
    finally:
        # 无论执行是否报错,都要恢复原有标准输出
        sys.stdout = original_stdout

# 调用方式和方法1一致
result = capture_print_output(printer)

额外说明

  • 如果原函数本身有其他返回值,可以修改工具函数同时返回原返回值和打印内容:
def capture_print_and_return(func, *args, **kwargs):
    output_buffer = StringIO()
    with redirect_stdout(output_buffer):
        original_return = func(*args, **kwargs)
    return original_return, output_buffer.getvalue()
  • 打印时指定了file参数输出到其他文件/流的内容,不会被上述方法捕获。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 16:54:02