簡體   English   中英

Python刷新打印語句

[英]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.writeprint都會自動刷新(即打印到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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM