问题描述
您说您的脚本“调用了一堆函数”,所以我假设它们是可从您的程序访问的python函数。我还假设您正在使用print
所有这些函数生成输出。在这种情况下,您可以替换sys.stdout
为StringIO.StringIO
,它将拦截您正在编写的所有内容。然后,您最终可以.getValue
在您的方法上调用方法,StringIO
以获取已发送到输出通道的所有内容。对于使用写入的子流程模块的外部程序,这也将起作用sys.stdout
。
这是一种便宜的方法。我建议您使用该logging
模块进行输出。您将对其输出的方式有更多的控制,也可以更轻松地对其进行控制。
解决方法
我有一个Python脚本,该脚本调用了许多函数,每个函数都将输出写入stdout。有时,当我运行它时,我想通过电子邮件发送输出(以及生成的文件)。我想知道如何捕获内存中的输出,以便可以使用该email
模块构建电子邮件。
到目前为止,我的想法是:
- 使用内存映射文件(但是似乎我必须为此在磁盘上保留空间,而且我不知道输出将持续多长时间)
- 绕过所有这些并将输出通过管道传递到sendmail(但是如果我也想附加文件,则可能很难)