在python中捕获完整的标准输出

时间:2015-07-29 18:09:44

标签: python redirect stdout

这是对问题的后续跟进:Disable warnings originating from scipy。答案成功地将用于stdout的任何输出重定向到/dev/null。新目标是捕获stdout正在打印的内容,以便我可以检查它是否存在某些字符串。这是一个部分解决方案,只要包含"警告"的字符串,就会引发MyError。使用stdoutprint

等内容打印到sys.stdout.write()
import sys
import contextlib

class Warning_Catcher():
    def write(self, string):
        if 'warning' in string:
            raise MyError

@contextlib.contextmanager
def capture_warning():
    oldout, sys.stdout = sys.stdout, Warning_Catcher()
    try:
        yield sys.stdout
    except MyError:
        # handle error
    finally:
        sys.stdout = oldout

with capture_warning() as out:
    print 'warning'

但是,它没有重定向文件描述符级别的内容,如重定向here上的其他帖子中所述。

我的问题是:我能否以与上述代码类似的方式将所有输出捕获到stdout,如果找到某个字符串会引发错误?关键是我不想写入实际文件(这就是为什么最初的计划是将所有内容写入/dev/null)。好像在使用' tempfile'具有中等缓冲区大小的模块可能会起作用,因为这样我可以使用dup2()来完全重定向事物,但这种方法还没有成功。

0 个答案:

没有答案