python中屏蔽輸出示例詳解
python中屏蔽輸出包含屏蔽標準輸出(比如打印出來的內容)、屏蔽標準錯誤(錯誤信息)還有屏蔽logging信息等。
屏蔽標準輸出
import contextlib
import os
with open(os.devnull, "w") as devnull:
with contextlib.redirect_stdout(devnull):
print("Hello, World!")運行上面的代碼會發(fā)現,沒有任何輸出,因為`redirect_stdout`表示將標準輸出的內容給定義到devnull去了,`os.devnull`是一個特殊的文件路徑,在Unix-like系統(tǒng)上通常是`/dev/null`,在Windows上是`NUL`。它的作用是丟棄所有寫入其中的數據。
屏蔽標準錯誤
屏蔽標準錯誤只需要把上面代碼中的`stdout`改成`stderr`就好了。

可以看到屏蔽標準錯誤不會屏蔽標準輸出,但是屏蔽標準輸出不是屏蔽異常,

異常該顯示還顯示,屏蔽異常的話,就目前我了解只有用try-except了。

上面的是正常的,將輸出寫到標準錯誤里是可以屏蔽的,但是好像很少有人會這么寫吧。。。
而且`print("xxx" file=sys.stdout)`和`print("xxx", file=sys.stderr)`貌似沒有什么區(qū)別,都將“xxx”打印到控制臺,關于此,chatgpt是這樣解釋的

反正我是覺得這個屏蔽標準錯誤的用法有點子雞肋。
屏蔽logging信息
屏蔽logging也是很常用的,上面的方法對logging信息沒有用,需要logging本身的設置
將logging的handler直接置空還是有l(wèi)ogging信息被打印出來,原因是,代碼中,即使你清除了 `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屏蔽輸出內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
peewee創(chuàng)建連接前的前置操作wireshark抓包實現
這篇文章主要為大家介紹了peewee創(chuàng)建連接前的前置操作wireshark?抓包實現示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-10-10
Tensorflow2.4從頭訓練Word?Embedding實現文本分類
這篇文章主要為大家介紹了Tensorflow2.4從頭訓練Word?Embedding實現文本分類,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-01-01

