[英]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.