python - 为什么在我停止程序之前不会写入文件?

标签 python file operating-system

我正在运行一个测试,发现文件实际上并没有被写入,直到我控制-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/

相关文章:

Linux主机规范

python - 在 Visual Studio Code 中运行外部程序时出现 "Unable to find thread for evaluation."

Python - 额外的关键字(?)和继承

python - 为什么pandas nlargest 比我的慢?

Java字符IO,具体是写入文件

java - 关闭资源总是很重要吗?

c++ - 处理多个登录系统

openssl - PyOpenSSL - 所有的加密功能在哪里?

python - 无法使用 PostgreSQL 找到 Django 身份验证用户

c - 使用 C,我如何知道文件何时创建?