python中屏蔽输出示例详解

python中屏蔽输出包含屏蔽标准输出(比如打印出来的内容)、屏蔽标准错误(错误信息)还有屏蔽logging信息等,这篇文章主要介绍了python中屏蔽输出,需要的朋友可以参考下

python中屏蔽输出包含屏蔽标准输出(比如打印出来的内容)、屏蔽标准错误(错误信息)还有屏蔽logging信息等。

屏蔽标准输出

import contextlib
import os
with 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" file=sys.stdout)print("xxx", file=sys.stderr)貌似没有什么区别,都将“xxx”打印到控制台,关于此,chatgpt是这样解释的

反正我是觉得这个屏蔽标准错误的用法有点子鸡肋。

屏蔽logging信息
屏蔽logging也是很常用的,上面的方法对logging信息没有用,需要logging本身的设置

将logging的handler直接置空还是有logging信息被打印出来,原因是,代码中,即使你清除了 logger.handlers 列表,logging模块可能会自动添加一个默认的处理器来处理日志消息。默认情况下,日志消息等级为 WARNING及以上的消息会被显示在控制台上。这解释了为什么你仍然看到 WARNING及以上级别的消息。

如果要完全屏蔽到logging的信息,需要自己写个handler,加进去

这下啥都没有了。当然也可以在emit这个函数里面对record进行一些处理,其中record有哪些属性可用呢?这里给出一个可以查record属性的代码示例

import logging
class NullHandler(logging.Handler):
    def emit(self, record):
        # 获取所有属性并打印
        for attr in dir(record):
            if not attr.startswith('__'):
                print(f'{attr}: {getattr(record, attr)}')
        pass
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger()
logger.handlers = []
logger.addHandler(NullHandler())
logger.debug("This debug message will be discarded.")

PYTHON 复制 全屏

到此这篇关于python中屏蔽输出的文章就介绍到这了,更多相关python屏蔽输出内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持vb.net教程C#教程python教程SQL教程access 2010教程Visual Basic 2010 2012 2013 从入门到精通|xin3721自学网

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值