Mar*_*n K 25 python operating-system file
我正在运行测试,发现该文件实际上没有写入,直到我控制-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)
Run Code Online (Sandbox Code Playgroud)
Kat*_*iel 68
写入磁盘的速度很慢,因此许多程序将写入存储到大块中,它们一次性写入.这称为缓冲,Python在您打开文件时会自动执行此操作.
当你写入文件时,你实际上是在写入内存中的"缓冲区".当它填满时,Python会自动将其写入磁盘.您可以告诉它"将缓冲区中的所有内容写入磁盘"
f.flush()
Run Code Online (Sandbox Code Playgroud)
这不是全部,因为操作系统也可能缓冲写入.你可以告诉它用文件写缓冲区
os.fsync(f.fileno())
Run Code Online (Sandbox Code Playgroud)
最后,您可以告诉Python不要使用open(f, "w", 0)
或仅保留1行缓冲区来缓冲特定文件open(f,"w", 1)
.当然,这会减慢该文件的所有操作,因为写入速度很慢.
您需要f.close()
将文件写入缓冲区刷新到文件中.或者在您的情况下,您可能只想要这样做,f.flush(); os.fsync();
以便您可以使用打开的文件句柄循环.
别忘了import os
.