假设我编写以下python代码:
file = open("test.txt","w+") file.write("hi") file.seek(0) file.read()
第二行告诉Python我想写"hi"到文件.当然这里涉及两个缓冲区 - 内部Python缓冲区和操作系统缓冲区 - 所以"hi"实际上可能不会写入文件.据我所知,如果我用文件显式刷新文件file.flush()
或关闭文件,file.close()
那么Python缓冲区将被清除,Python将使用操作系统API写入方法.我也理解,在这两种情况下(我明确地称为刷新或关闭),不能保证操作系统实际上会写入磁盘(为了保证我必须调用os.fsync(file)
).
无论如何,在上面的代码中,我不会调用flush也不会关闭.所以这是我的问题:
在写操作之后,当我将文件指针返回到文件的开头(file.seek(0)
)和/或从文件(file.read()
)中读取时,是否可以保证Python将刷新自己的缓冲区?如果这是有保证的,保证刷新是否是搜索操作,读操作或者其中之一?换句话说,搜索和/或读取是否自动执行刷新?为了清楚起见,我不是在谈论操作系统刷新到磁盘,我非常积极并不能保证 - 我只是在谈论Python自己的缓冲区.
当我测试它时,似乎读取和搜索都刷新了Python的缓冲区,但我不确定这是否只是可能的行为或保证行为.
如果这不是保证行为,我仍然可以依赖于在file.write之后调用file.seek或file.read(即/是否有一些其他内部机制来处理不涉及操作系统写入的内容)?或者最好的做法是file.flush()
在写作之后总是在寻找或阅读之前打电话?