我有一个大型项目,包含足够多的模块,每个模块都打印到标准输出.现在随着项目规模的扩大,有大量的没有.print在std上打印很多的语句使程序变得相当慢.
所以,我现在想在运行时决定是否向stdout打印任何东西.我无法对模块进行更改,因为有很多模块.(我知道我可以将stdout重定向到一个文件,但即使这样也相当慢.)
所以我的问题是如何将stdout重定向到什么,即如何使print语句什么都不做?
# I want to do something like this.
sys.stdout = None # this obviously will give an error as Nonetype object does not have any write method.
Run Code Online (Sandbox Code Playgroud)
目前我唯一的想法是创建一个具有write方法(什么都不做)的类,并将stdout重定向到这个类的实例.
class DontPrint(object):
def write(*args): pass
dp = DontPrint()
sys.stdout = dp
Run Code Online (Sandbox Code Playgroud)
在python中有一个内置机制吗?还是有比这更好的东西?
是否可以在Python中暂时重定向stdout/stderr(即在方法的持续时间内)?
当前解决方案(我最初记得但后来忘记了)的问题在于它们没有重定向 ; 相反,他们只是完整地替换了流.因此,如果一个方法有一个本地副本,一个变量的任何原因(例如,由于流被作为参数传递的东西),它不会工作.
有解决方案吗