为什么直到我停止程序才写入文件?

2025-03-06 08:54:00
admin
原创
77
摘要:问题描述:我正在运行测试,发现直到我按下 Control-C 中止程序时,文件才真正写入。有人能解释为什么会发生这种情况吗?我希望它能同时写入,这样我就可以在进程中间读取该文件。import os from time import sleep f = open("log.txt", &q...

问题描述:

我正在运行测试,发现直到我按下 Control-C 中止程序时,文件才真正写入。有人能解释为什么会发生这种情况吗?

我希望它能同时写入,这样我就可以在进程中间读取该文件。

import os
from time import sleep

f = open("log.txt", "a+")
i = 0
while True:
  f.write(str(i))
  f.write("
")
  i += 1
  sleep(0.1)

解决方案 1:

写入磁盘很慢,因此许多程序将写入存储为大块,然后一次性写入。这称为缓冲,当您打开文件时,Python 会自动执行此操作。

当你写入文件时,你实际上是在写入内存中的“缓冲区”。当缓冲区填满时,Python 会自动将其写入磁盘。你可以告诉它“现在将缓冲区中的所有内容写入磁盘”,方法是

f.flush()

这并不是全部,因为操作系统可能也会缓冲写入。你可以告诉使用以下命令写入文件缓冲区

os.fsync(f.fileno())

最后,你可以用 告诉 Python 不要缓冲某个文件,open(f, "w", 0)或者只保留一行缓冲区open(f,"w", 1)。当然,这会减慢该文件上的所有操作,因为写入速度很慢。

解决方案 2:

您需要f.close()将文件写入缓冲区刷新到文件。或者,在您的情况下,您可能只想执行此操作,f.flush(); os.fsync();以便继续使用打开的文件句柄进行循环。

别忘了import os

解决方案 3:

您必须强制写入,因此我使用以下几行来确保文件已写入:

# Two commands together force the OS to store the file buffer to disc
    f.flush()
    os.fsync(f.fileno())

解决方案 4:

您将需要检查file.flush()- 但请注意,这可能不会将数据写入磁盘,引用:

注意:flush() 不一定会将文件的数据写入磁盘。使用 flush() 后跟 os.fsync() 可确保此行为。

关闭文件(file.close())也将确保数据被写入 - 使用with将隐式地执行此操作,并且通常是提高可读性和清晰度的更好选择 - 更不用说解决其他潜在问题。

解决方案 5:

这是 windows 主义。如果你.close()在处理完文件后添加一个显式命令,那么它就会出现在资源管理器中。即使只是刷新它也可能足够了(我手边没有 windows 框可以测试)。但基本上 f.write实际上并没有写入,它只是附加到写入缓冲区 - 直到缓冲区被刷新,你才会看到它。

在 UNIX 上,在这种情况下,文件通常会显示为 0 字节文件。

解决方案 6:

要刷新的文件处理程序。

f.flush()

解决方案 7:

文件不会被写入,因为输出缓冲区直到垃圾收集生效时才会被刷新,并且会刷新 I/O 缓冲区(很可能通过调用f.close())。

或者,在循环中,您可以调用f.flush()后跟os.fsync(),如此处所述。

f.flush()
os.fsync()

话虽如此,如果您计划与代码的其他部分共享该文件中的数据,我强烈建议使用StringIO对象。

解决方案 8:

写入文件的数据正在被缓冲,只有当缓冲区满或者文件关闭时,缓冲的数据才会写入文件。

如果您以文本模式打开文件,并且希望每次写完一行时都刷新输出,则在打开文件时将缓冲设置为行缓冲:

f = open("log.txt", "a+", buffering=1)

有关更多详细信息,请参阅https://docs.python.org/3/library/functions.html#open

如果你想要确保文件与程序中某个特定点迄今为止写入的内容保持同步,并且不介意在这些点之间缓冲输出,那么你可以在这些点明确刷新缓冲区,方法是

f.flush()

如果您想要刷新部分行,则使用行缓冲时刷新也很有用。

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   2560  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1552  
  IPD(Integrated Product Development)流程作为一种先进的产品开发管理模式,在众多企业中得到了广泛应用。其中,技术评审与决策评审是IPD流程中至关重要的环节,它们既有明显的区别,又存在紧密的协同关系。深入理解这两者的区别与协同,对于企业有效实施IPD流程,提升产品开发效率与质量具有重要意义...
IPD管理流程   1  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、ClickUp、Freshdesk、GanttPRO、Planview、Smartsheet、Asana、Nifty、HubPlanner、Teamwork。在当今快速变化的商业环境中,项目管理软件已成为企业提升效率、优化资源分配和确保项目按时交付的关键工具。然而...
项目管理系统   2  
  建设工程项目质量关乎社会公众的生命财产安全,也影响着企业的声誉和可持续发展。高质量的建设工程不仅能为使用者提供舒适、安全的环境,还能提升城市形象,推动经济的健康发展。在实际的项目操作中,诸多因素会对工程质量产生影响,从规划设计到施工建设,再到后期的验收维护,每一个环节都至关重要。因此,探寻并运用有效的方法来提升建设工程...
工程项目管理制度   3  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用