python - 在 Python 的同一进程中捕获标准输出

标签 python stream

我有一个调用一堆函数的 python 脚本,每个函数都将输出写入标准输出。有时当我运行它时,我想通过电子邮件发送输出(连同生成的文件)。我想知道如何在内存中捕获输出,以便我可以使用 email 模块来构建电子邮件。

到目前为止我的想法是:

  • 使用内存映射文件(但似乎我必须为此在磁盘上保留空间,而且我不知道输出会持续多长时间)
  • 绕过所有这些并将输出通过管道发送到 sendmail(但如果我还想附加文件,这可能会很困难)

最佳答案

我修改了 None 的答案以使其成为上下文管理器:

import sys, StringIO, contextlib

class Data(object):
    pass

@contextlib.contextmanager
def capture_stdout():
    old = sys.stdout
    capturer = StringIO.StringIO()
    sys.stdout = capturer
    data = Data()
    yield data
    sys.stdout = old
    data.result = capturer.getvalue()

用法:

with capture_stdout() as capture:
    print 'Hello'
    print 'Goodbye'
assert capture.result == 'Hello\nGoodbye\n'

关于python - 在 Python 的同一进程中捕获标准输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2654834/

相关文章:

c# - 在 Windows 运行时从位图创建流

Python正则表达式匹配特定单词

c# - 在静态方法中管理一次性对象

c# - 作为流的 Outlook MailItem

c# - IFile RepositoryProvider 处理上传的文件

java - 在Java中使用对象数据流和原始数据流哪个更有效率?

python - 在 App Engine 上使用 deferred.defer 时出错

python - 为什么Python需要丰富的比较?

python - 无法训练只有一个隐藏层的神经网络

python - 根据python中的多列条件分配列值