
python如何隐藏print
用户关注问题
我想在代码运行时暂时禁止print语句的输出,有什么简单的方法可以做到吗?
使用上下文管理器重定向输出
可以使用上下文管理器,将sys.stdout重定向到os.devnull实现临时禁止print输出。例如:
import sys
import os
class HidePrint:
def enter(self):
self._original_stdout = sys.stdout
sys.stdout = open(os.devnull, 'w')
def exit(self, exc_type, exc_val, exc_tb):
sys.stdout.close()
sys.stdout = self._original_stdout
with HidePrint():
print('这条信息不会被显示')
print('print恢复正常')
该方法在with语句块内禁止print输出,代码外print输出正常。
有没有方法可以在不修改所有print语句的情况下,彻底禁止程序中所有print信息的输出?
重写sys.stdout实现全局禁止print
重写sys.stdout为一个空类,即可忽略所有print输出内容。示例代码如下:
import sys
class DummyFile:
def write(self, x):
pass
def flush(self):
pass
sys.stdout = DummyFile()
print('这条信息不会被显示')
这样替换后,所有print内容都会被忽略,直到重新赋值sys.stdout。
有没有办法让print函数根据某些条件决定是否输出内容?
定义自定义打印函数控制输出
可以定义一个自定义的打印函数,根据开关变量来决定是否调用print。例如:
DEBUG = False
def debug_print(*args, **kwargs):
if DEBUG:
print(*args, **kwargs)
调试时开启输出
DEBUG = True
debug_print('这条信息仅在调试时显示')
这样做更灵活,不影响其他print调用,也方便开启或关闭打印信息。