Python的open()会读取未刷新缓存吗?
我对文件缓冲区是怎么工作的了解不太深,所以请原谅我这个问题有点简单。我有一段Python代码,它会等待一个文件出现,然后读取这个文件。
while 1:
try:
f = open('file.txt')
f.close()
print "Message received."
break
except:
time.sleep(0.3)
这里的file.txt
是另一个程序写的文件。不过,我有个疑问,Python是不是在文件file.txt
还没完全写完的时候就开始读取了,也就是说在我调用close()
之前就已经关闭了文件句柄。这种情况可能发生吗?
如果真是这样,有没有办法让我在上面的读取程序中检测到缓冲区是否已经被刷新,也就是在我调用f.close()
之前?
4 个回答
1
Python不会阻止你去读取一个还没有写完的文件。
如果我在等另一个程序写的文件,我通常会让那个程序先写一个不同名字的文件。等那个程序写完后,它会关闭文件并把文件名改成我期待的那个名字。这样我就不会读到一个没写完的文件。
1
要检查一个文件是否存在,可以使用 os.path.exists
,或者如果你想确认它是一个“常规”文件,可以用 os.path.isfile
。
在Unix系统中,当你打开一个文件进行写入或追加内容时,会创建一个目录条目。但是,实际上写入到文件中的内容在读者看来是看不到的,直到这些内容被刷新到文件中。通常没有办法去询问一个文件是否有“待处理”的输入输出操作;至少在Unix系统上是这样。