国外做鞋子的网站吗,国外优秀设计公司网站,怎么自做网站,注册网站需要多少钱?python中屏蔽输出包含屏蔽标准输出#xff08;比如打印出来的内容#xff09;、屏蔽标准错误#xff08;错误信息#xff09;还有屏蔽logging信息等。
屏蔽标准输出
import contextlib
import oswith open(os.devnull, w) as devnull:with contextlib.redire…python中屏蔽输出包含屏蔽标准输出比如打印出来的内容、屏蔽标准错误错误信息还有屏蔽logging信息等。
屏蔽标准输出
import contextlib
import oswith open(os.devnull, w) as devnull:with contextlib.redirect_stdout(devnull):print(Hello, World!)
运行上面的代码会发现没有任何输出因为redirect_stdout表示将标准输出的内容给定义到devnull去了os.devnull是一个特殊的文件路径在Unix-like系统上通常是/dev/null在Windows上是NUL。它的作用是丢弃所有写入其中的数据。
屏蔽标准错误
屏蔽标准错误只需要把上面代码中的stdout改成stderr就好了。 可以看到屏蔽标准错误不会屏蔽标准输出但是屏蔽标准输出不是屏蔽异常 异常该显示还显示屏蔽异常的话就目前我了解只有用try-except了。 上面的是正常的将输出写到标准错误里是可以屏蔽的但是好像很少有人会这么写吧。。。
而且print(xxx filesys.stdout)和print(xxx, filesys.stderr)貌似没有什么区别都将“xxx”打印到控制台关于此chatgpt是这样解释的 反正我是觉得这个屏蔽标准错误的用法有点子鸡肋。
屏蔽logging信息
屏蔽logging也是很常用的上面的方法对logging信息没有用需要logging本身的设置
将logging的handler直接置空还是有logging信息被打印出来原因是代码中即使你清除了 logger.handlers 列表logging 模块可能会自动添加一个默认的处理器来处理日志消息。默认情况下日志消息等级为 WARNING 及以上的消息会被显示在控制台上。这解释了为什么你仍然看到 WARNING 及以上级别的消息。 如果要完全屏蔽到logging的信息需要自己写个handler加进去 这下啥都没有了。当然也可以在emit这个函数里面对record进行一些处理其中record有哪些属性可用呢这里给出一个可以查record属性的代码示例
import loggingclass NullHandler(logging.Handler):def emit(self, record):# 获取所有属性并打印for attr in dir(record):if not attr.startswith(__):print(f{attr}: {getattr(record, attr)})passlogging.basicConfig(levellogging.DEBUG)
logger logging.getLogger()
logger.handlers []
logger.addHandler(NullHandler())logger.debug(This debug message will be discarded.)