我正在运行一个测试,发现文件实际上并没有被写入,直到我控制-C 来中止程序。谁能解释一下为什么会这样?
我希望它同时写入,所以我可以在进程中间读取文件。
import os
from time import sleep
f = open("log.txt", "a+")
i = 0
while True:
f.write(str(i))
f.write("\n")
i += 1
sleep(0.1)
最佳答案
写入磁盘很慢,因此许多程序将写入存储到大块中,它们一次性写入。这称为缓冲,当您打开文件时,Python 会自动执行此操作。
当您写入文件时,您实际上是在写入内存中的“缓冲区”。当它填满时,Python 会自动将其写入磁盘。您可以告诉它“现在将缓冲区中的所有内容写入磁盘”
f.flush()
这还不是全部,因为操作系统可能也会缓冲写入。您可以告诉 it 用
写入文件的缓冲区os.fsync(f.fileno())
最后,您可以告诉 Python 不要使用 open(f, "w", 0)
来缓冲特定文件,或者只使用 open(f, "w", 1)
。当然,这会减慢对该文件的所有操作,因为写入速度很慢。
关于python - 为什么在我停止程序之前不会写入文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9824806/