我有一个调用一堆函数的 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/