[英]Python flush a print statement
我很想得到一些Python代碼,該代碼允許我將輸出到控制台和具有相同print語句的日志文件輸出。 谷歌搜索后,我發現這個網站提供了一個很好的解決方案。 但是,我希望能夠在每次寫入后刷新輸出緩沖區,以便在日志文件中看到它。 我將如何將其添加到該類中?
我試圖按照以下設置進行操作...
class output_file(object):
def __init__(self, stdout, filename):
silentremove(filename)
self.stdout = stdout
self.logfile = open(filename, "a")
def write(self, text):
self.stdout.write(text)
self.logfile.write(text)
sys.stdout.flush()
def flush(self):
sys.stdout.flush()
def close(self):
self.stdout.close()
self.logfile.close()
這是一個周期性錯誤,導致flush函數調用自身。
class output_file(object):
def __init__(self, stdout, filename):
silentremove(filename)
self.stdout = stdout
self.logfile = open(filename, "a")
def write(self, text):
self.stdout.write(text)
self.logfile.write(text)
self.stdout.flush()
def flush(self):
sys.stdout.flush()
def close(self):
self.stdout.close()
self.logfile.close()
這根本沒有沖洗它。
以下內容以無緩沖模式重新打開sys.stdout。 之后,每個stdout.write
和print
都會自動刷新(即打印到stdout)。
import sys
import os
# Flush STDOUT continuously
sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)
os.fdopen的第三個參數是緩沖參數, 0
是未緩沖的, 1
是行緩沖的, >1
將導致(大約)大小(以字節為單位)的緩沖區, <0
將使用系統默認值。
UPDATE
使用Python 3時,不允許使用非緩沖文本,即以下內容
sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)
會導致錯誤
ValueError: Can't have unbuffered text I/O
要在python3中使用無緩沖的I / O,可以使用字節,即
sys.stdout = os.fdopen(sys.stdout.fileno(), 'wb', 0)
在python3中可以正常工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.