我看到他们用的代码文件.flush(). 所以,我四处寻找,找到了This SO post。我有点明白为什么要用冲洗法。在被标为答案的答案中写着以下内容
Typically you don't need to bother with either method, but if you're in a scenario where paranoia about what actually ends up on disk is a good thing, you should make both calls as instructed.
所以,我想知道,当我们使用上下文管理器打开一个文件并写入一些文本,然后当代码从这个上下文管理器中退出时,有可能文本没有被写入文件?如果是,为什么python在文件.close()被调用?已经做了吗?在
io
模块中的file对象(从open
获得的对象)以及stdlib中预期的其他任何地方的文件对象在close
时总是flush
,或者依赖于保证这样做的平台API。在即使是第三方库也需要在其^{} 方法上“关闭并刷新流”,如果它们希望它们的对象是文件对象。1
调用
flush
的主要原因是当您还没有关闭文件,但其他程序可能想查看内容时。在例如,很多人写这样的代码:
…然后他们想知道为什么当他们
^{pr2}$cat dump.txt
或者在记事本上打开它时,它是空的,或者缺少最后3行,或者在一行中间被切断。这就是flush
解决的问题:或者,它们运行的是相同的代码,但问题是有人可能拔掉计算机上的插头(或者,现在更可能的是,杀死你的容器),然后重新启动后,他们将有一个损坏的文件,在中间行被切断,现在扫描输出的perl脚本将无法运行,没有人想调试perl代码。不同的问题,相同的解决方案。在
但是,如果您知道文件将在某个时间点关闭(例如,因为有一个
with
语句在该点之前结束),并且不需要在该点之前完成该文件,则无需调用flush
。在你没有提到
fsync
,这是一个完全不同的问题,比大多数人的事情复杂得多,所以我就不谈了。但你提到的问题已经涵盖了基本问题。在1。您总是有机会使用某个第三方库来处理一个类似文件的对象,该对象的类型与您需要的文件对象非常接近,但不是这样。这样的类型可能有一个}。但老实说,我从来没有见过一个对象有一个
close
而不是{flush
方法,它在close时没有调用它。Python在文件
.close()
d时执行刷新,这在上下文管理器退出时发生。在链接的post更多的是指这样一个场景,比如说,一个日志文件打开了很长一段时间,并且您希望确保每次写入之后,所有内容都被写入磁盘。这就是你想要
.write(); .flush();
的地方。在相关问题 更多 >
编程相关推荐