Python 將print內容重定向到日誌檔案

2021-10-23 11:08:34 字數 1104 閱讀 4290

我的方法:

開啟乙個檔案,然後把螢幕輸出流重定向到檔案輸出流

import sys, time

log_file =

open

(time.strftime(

"%y%m%d%h%m%s"

.format

('_'

), time.localtime(time.time())

)+'.log'

,'w'

)sys.stdout = log_file

……print

(***)

print

(***)

……log_file.close(

)

我搜尋的看見較多的方式:

class

logger

(object):

def__init__

(self, filename=

"default.log"

, path=

"./"):

buffer

, encoding=

'utf-8'

) self.terminal = sys.stdout

self.log =

open

(os.path.join(path, filename)

,"a"

, encoding=

'utf8'

)def

write

(self, message)

: self.terminal.write(message)

self.log.write(message)

defflush

(self)

:pass

sys.stdout = logger(

'tmp.log'

, path=path)

我的解讀:應該是封裝了乙個類似stdout相同的輸出流,然後程式中的預設輸出流(螢幕)重新賦值為自定義的檔案輸出流,並且給這個日誌輸出流定義需要的write方法和flush方法。

我覺得兩種方式看著差距比較大,但是原理相同

根據內容重新載入datagridview

解決反向的顯示的問題 在datagridview事件databindingcomplete新增 反向修改 listxuanbie2 list dtokng.datasource status foreach datagridviewrow row in dtokng.rows else if lis...

python寫入日誌檔案時日誌內容重複寫入

python寫入日誌檔案時日誌內容重複寫入 原因handler未移除,導致重複寫入 問了度娘之後,大概搞明白了,就是你第二次呼叫log的時候,根據getlogger name 裡的name獲取同乙個logger,而這個logger裡已經有了第一次你新增的handler,第二次呼叫又新增了乙個hand...

Gradle修改檔案內容 重新命名

使用gradle打包時,需要將手寫的服務啟動指令碼放到壓縮包中,本來只需要簡單的 就可以了。into bin 但是實際專案中,專案名可配,版本可配。伺服器上的部署的目錄就帶有專案名和版本資訊,比如實際專案目錄是 data0 projname 1.2.3 為了讓指令碼能正常使用,我的構想是維護乙個指令...