Python日志無(wú)延遲實(shí)時(shí)寫入的示例
我在用python生成日志時(shí),發(fā)現(xiàn)無(wú)論怎么flush(),文件內(nèi)容總是不能實(shí)時(shí)寫入,導(dǎo)致程序意外中斷時(shí)一無(wú)所獲。
以下是查到的解決方案(親測(cè)可行):
open 函數(shù)中有一個(gè)bufferin的參數(shù),默認(rèn)是-1,如果設(shè)置為0是,就是無(wú)緩沖模式。 但是用二進(jìn)制模式打開這個(gè)文件,并且把要寫入的信息轉(zhuǎn)換byte -like如下。 with open("test.txt",'wb',buffering=0) as f: #wb是寫模式加二進(jìn)制模式 f.write(b"hello!")在字符串前加b,轉(zhuǎn)換成二進(jìn)制 如果沒用二進(jìn)制打開文件會(huì)提示ValueEorror: 沒把字符串轉(zhuǎn)成二進(jìn)制會(huì)提示:TypeError: a bytes-like object is required, not ‘str'
測(cè)試:
class Logger(object): def __init__(self, log_path="default.log"): self.terminal = sys.stdout # self.log = open(log_path, "w+") self.log = open(log_path, "wb", buffering=0) def print(self, message): self.terminal.write(message + "\n") self.log.write(message.encode('utf-8') + b"\n") def flush(self): self.terminal.flush() self.log.flush() def close(self): self.log.close()
報(bào)錯(cuò)1:TypeError: can't concat str to bytes
報(bào)錯(cuò)2:write需要str對(duì)象,無(wú)法寫入bytes對(duì)象(大意)
這是因?yàn)椋?/strong>
(1)log.write需要寫入bytes對(duì)象,這里沒問(wèn)題。但是encode返回的是bytes型的數(shù)據(jù),不可以和str相加,需要將‘\n'前加b。
(2)terminal.write函數(shù)參數(shù)需要為str類型,轉(zhuǎn)化為str。
改為:
def print(self, message): self.terminal.write(message + "\n") self.log.write(message.encode('utf-8') + b"\n")
運(yùn)行成功!
以上這篇Python日志無(wú)延遲實(shí)時(shí)寫入的示例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python Pygame實(shí)戰(zhàn)之打地鼠小游戲
Pygame庫(kù)是專門為了幫助做出的游戲和其他多媒體應(yīng)用Python編程語(yǔ)言的一個(gè)開放源代碼模塊。本文將利用Pygame模塊制作一個(gè)打地鼠的小游戲,快跟隨小編一起學(xué)習(xí)一下吧2022-01-01python新一代網(wǎng)絡(luò)請(qǐng)求庫(kù)之python-httpx庫(kù)操作指南
Python 的 httpx 包是一個(gè)用于 HTTP 交互的一個(gè)優(yōu)秀且靈活的模塊,下面這篇文章主要給大家介紹了關(guān)于python新一代網(wǎng)絡(luò)請(qǐng)求庫(kù)之python-httpx庫(kù)的相關(guān)資料,需要的朋友可以參考下2022-09-09解決pycharm回車之后不能換行或不能縮進(jìn)的問(wèn)題
今天小編就為大家分享一篇解決pycharm回車之后不能換行或不能縮進(jìn)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-01-01python數(shù)字圖像處理之高級(jí)濾波代碼詳解
這篇文章主要介紹了python數(shù)字圖像處理之高級(jí)濾波代碼詳解,介紹了許多對(duì)圖像處理的濾波方法,具有一定參考價(jià)值,需要的朋友可以了解下。2017-11-11python pandas 組內(nèi)排序、單組排序、標(biāo)號(hào)的實(shí)例
下面小編就為大家分享一篇python pandas 組內(nèi)排序、單組排序、標(biāo)號(hào)的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-04-04Python網(wǎng)絡(luò)編程 Python套接字編程
這篇文章主要為大家詳細(xì)介紹了Python網(wǎng)絡(luò)編程的相關(guān)資料,Python套接字編程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-09-09