Python 3.x 在Python3中重定向stdout、stderr和将来的警告
我使用的python模块在调用构造函数时会生成大量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
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)以及我生成的对象的东西。我无法更改实际问题的构造函数中的函数调用。可能重复“否”,至少我不知道如何使该线程的解决方案与我的问题一起工作。