Python 3.x 在Python3中重定向stdout、stderr和将来的警告

Python 3.x 在Python3中重定向stdout、stderr和将来的警告,python-3.x,constructor,stdout,stderr,Python 3.x,Constructor,Stdout,Stderr,我使用的python模块在调用构造函数时会生成大量stdout/stderr未来警告,如下所示: foo_obj = foo(par1, par2) 我无法真正编辑或抑制模块内的输出,因为我无法访问它/不想弄乱它 有没有一种方法可以轻松地执行以下操作: if verbose: foo_obj = foo(par1, par2) #generating lots of output else: foo_obj = foo(par1, par2) #and do

我使用的python模块在调用构造函数时会生成大量stdout/stderr未来警告,如下所示:

foo_obj = foo(par1, par2)
我无法真正编辑或抑制模块内的输出,因为我无法访问它/不想弄乱它

有没有一种方法可以轻松地执行以下操作:

if verbose:
    foo_obj = foo(par1, par2)
    #generating lots of output

else:
    foo_obj = foo(par1, par2)
    #and do something fancy to the above to not generate and stdout/stderr 
编辑/澄清

如果从中获取解决方案,则无法抑制输出。 我在此构建了一个更详细的示例:

import numpy as np
import warnings

class WritingOutput(object):
    def __init__(self, b):
        self._a = 5
        self._b = b 
        self.generate_output()

    def generate_output(self):
        print("This is normal output")
        warnings.warn("This is a warning")
        print ('a is %d and b is %s ' %(self._a, self._b))

wo_obj = WritingOutput('10')
print (wo_obj._a)
with suppress_stdout_stderr():
    wo_obj = WritingOutput('10')

使用建议的修复,输出仍然打印。我必须承认,我不太明白修复程序首先应该如何工作。我需要一个能够返回WritingOutput中写入的输出(stderr和stdout)以及我生成的对象的东西。我无法更改实际问题的构造函数中的函数调用。

可能重复“否”,至少我不知道如何使该线程的解决方案与我的问题一起工作。