Tim*_*ton 207 python file flush
关于(1)我不确定.
至于(2),我相信Python在每一行之后都会刷新到stdout.但是,如果你将stdout重载为一个文件,它是否经常刷新?
Cor*_*erg 306
对于文件操作,Python使用操作系统的默认缓冲,除非您另行配置.您可以指定缓冲区大小,未缓冲或行缓冲.
例如,open函数采用缓冲区大小参数.
http://docs.python.org/library/functions.html#open
"可选的缓冲参数指定文件所需的缓冲区大小:"
码:
bufsize = 0
f = open('file.txt', 'w', buffering=bufsize)
Run Code Online (Sandbox Code Playgroud)
kor*_*ina 163
您还可以使用该flush()方法以编程方式强制将缓冲区刷新到文件.
with open('out.log', 'w+') as f:
f.write('output is ')
# some work
s = 'OK.'
f.write(s)
f.write('\n')
f.flush()
# some other work
f.write('done\n')
f.flush()
Run Code Online (Sandbox Code Playgroud)
我在使用时拖尾输出文件时发现这很有用tail -f.
KLe*_*ee1 13
我不知道这是否也适用于python,但我认为这取决于您运行的操作系统.
例如,在Linux上,输出到终端会刷新换行符上的缓冲区,而对于输出到文件,它只会在缓冲区已满时刷新(默认情况下).这是因为刷新缓冲区的次数更少,并且用户不太可能注意到输出是否未在文件中的换行符上刷新.
如果您需要,您可以自动刷新输出.
编辑:我认为你会以这种方式自动刷新python(基于这里)
#0 means there is no buffer, so all output
#will be auto-flushed
fsock = open('out.log', 'w', 0)
sys.stdout = fsock
#do whatever
fsock.close()
Run Code Online (Sandbox Code Playgroud)
N R*_*awa 12
您还可以通过从io模块调用只读DEFAULT_BUFFER_SIZE属性来检查默认缓冲区大小.
import io
print (io.DEFAULT_BUFFER_SIZE)
Run Code Online (Sandbox Code Playgroud)