python中屏蔽输出示例详解
python中屏蔽输出包含屏蔽标准输出(比如打印出来的内容)、屏蔽标准错误(错误信息)还有屏蔽logging信息等。
屏蔽标准输出
1 2 3 4 5 | 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属性的代码示例
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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屏蔽输出内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
微信公众号搜索 “ 脚本之家 ” ,选择关注
程序猿的那些事、送书等活动等着你
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 reterry123@163.com 进行投诉反馈,一经查实,立即处理!
相关文章
Windows上安装tensorflow 详细教程(图文详解)
这篇文章主要介绍了Windows上安装TENSORFLOW 详细教程,本文通过图文并茂的形式给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下2020-02-02PyCharm 2020.2下配置Anaconda环境的方法步骤
这篇文章主要介绍了PyCharm 2020.2下配置Anaconda环境的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2020-09-09
最新评论