python多久刷新一次文件?

2024-04-25 21:56:42 发布

您现在位置:Python中文网/ 问答频道 /正文


Tags: python
3条回答

对于文件操作,Python使用操作系统的默认缓冲区,除非您对其进行了其他配置。可以指定缓冲区大小、无缓冲区或行缓冲区。

例如,open函数接受缓冲区大小参数。

http://docs.python.org/library/functions.html#open

“可选缓冲参数指定文件所需的缓冲区大小:

  • 0表示无缓冲
  • 1表示线路缓冲
  • 任何其他正值意味着使用(大约)该大小的缓冲区。
  • 负缓冲意味着使用系统默认值,对于tty设备通常是行缓冲的,对于其他文件则是完全缓冲的。
  • 如果省略,则使用系统默认值。

代码:

bufsize = 0
f = open('file.txt', 'w', buffering=bufsize)

我不知道这是否也适用于python,但我认为这取决于您运行的操作系统。

例如,在Linux上,输出到终端刷新换行符上的缓冲区,而输出到文件只在缓冲区已满时刷新(默认情况下)。这是因为刷新缓冲区的次数越少,效率就越高,而且如果输出没有在文件的换行符上刷新,用户就不太可能注意到。

如果您需要的话,您可以自动刷新输出。

编辑:我认为您可以用这种方式在python中自动刷新(基于 来自here

#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()

还可以使用^{}方法以编程方式强制将缓冲区刷新到文件。

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()

当使用tail -f跟踪输出文件时,我发现这很有用。

相关问题 更多 >