这是对问题的后续跟进:Disable warnings originating from scipy。答案成功地将用于stdout
的任何输出重定向到/dev/null
。新目标是捕获stdout
正在打印的内容,以便我可以检查它是否存在某些字符串。这是一个部分解决方案,只要包含"警告"的字符串,就会引发MyError
。使用stdout
或print
:
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()
来完全重定向事物,但这种方法还没有成功。