Python日誌無延遲實時寫入的示例

2022-10-04 16:54:18 字數 1332 閱讀 4070

我在用python生成日誌時,發現無論怎麼flush(),檔案內容總是不能實時寫入,導致程式意外中斷時一無所獲。

以下是查到的解決方案(親測可行):

open 函式中有乙個bufferin的引數,預設是-1,如果設定為0是,就是無緩衝模式。

但是用二進位制模式開啟這個檔案,並且把要寫入的資訊轉換byte -like如下。

with open("test.txt",'wb',buffering=0) as f:

#wb是寫模式加二進位制模式

f.write(b"hello!")在字串前加b,轉換成二進位制

如果沒用二進位制開啟檔案會提示valueeorror:

沒把字串轉成二進位制會提示:typeerror: a bytes-like object is required, not 『str'

測試: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 clo程式設計客棧se(self):

self.log.close()

報錯1:typeerror: can't concat str to bytes

報錯2:write需要str物件,無法寫入bytes物件(大意)

這是因為:

(1)log.write需要寫入bytes物件,這裡沒問題。但是encode返回的是bytes型的資料,不可以和str相加,需要將『\n'前加b。

(2)terminal.write函式引數需要為str型別,轉化為str。

改為:def print(self, message):

self.terminal.write(message + "\n")

self.log.write(message.encode('utf-8') + b"\n")

執行成功!

本文標題: python日誌無延遲實時寫入的示例

本文位址: /jiaoben/python/265228.html

python寫入日誌檔案並實時輸出在控制台

import logging from logging import handlers class logger object level relations 日誌關係對映 def init self,filename,level info backcount 10,fmt asctime s pa...

python之寫入日誌

對 程式發生錯誤的時候,通過記錄日誌的方式,來排查問題,是乙個很好的習慣 對於日誌的設定,需要以下幾點 1 存放路徑 2 日誌檔名 3 內容格式 format 2020 10 14.21.34.24 logbasic.py 錯誤的行號 級別 具體內容 執行時間 檔名 報錯行號 等級 msg 具體資訊...

python 實時遍歷日誌檔案

open 遍歷乙個大日誌檔案 使用 readlines 還是 re 總體上 readlines 不慢於python 一次次呼叫 readline 因為前者的迴圈在c語言層面,而使用readline 的迴圈是在python語言層面。但是 readlines 會一次性把全部資料讀到記憶體中,記憶體佔用率...