Python';s open()是否读取未刷新的缓冲区?

Python';s open()是否读取未刷新的缓冲区?,python,file-io,buffer,Python,File Io,Buffer,我对文件缓冲区如何工作的了解相当薄弱,所以请原谅这个问题的简单性。我有一段Python代码,它等待一个文件出现,然后读取它 while 1: try: f = open('file.txt') f.close() print "Message received." break except: time.sleep(0.3) 其中file.txt是由另一个程序编写的文件。但是,我怀疑Python正在读

我对文件缓冲区如何工作的了解相当薄弱,所以请原谅这个问题的简单性。我有一段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()
之前,我是否有办法(在上面列出的读取程序中)检测缓冲区是否已刷新?

Python不会阻止您读取另一个进程尚未完成写入的文件


如果我正在等待来自另一个进程的文件,我通常会让该进程写入另一个文件名。一旦该进程完成写入,它就会关闭并将文件重命名为我期望的文件名。这样我就不会得到一个部分文件。

要检查文件是否存在,请使用
os.path.exists
或者
os.path.isfile
,如果您要求它是一个“常规”文件


在Unix上,打开文件进行写入/追加时,将创建一个目录项。但在I/O刷新之前,写入文件的字节实际上不会显示在那里(从读取器的角度来看)。没有正常的方式询问文件上是否存在“挂起”I/O;至少不在Unix上。

不要为此使用
while循环。有一个更好的方法,尽管细节取决于您的操作系统

Linux已经做到了。您可以编写一个简单的脚本来监视目录,并对\u CLOSE\u write中的
事件(仅在文件关闭后发生)作出反应


OSX()和具有类似的功能。

一般来说,Linux在一个进程打开文件进行读取,而另一个进程打开文件进行写入时没有任何问题。考虑做一些事情,比如
tail-f$SOME_FILE
实时跟踪文件更新;如果试图打开该文件进行读取时必须阻塞并等待写入程序关闭该文件,则此操作不可能成功。

在本例中,不可能,因为我在这个小程序中的目标是检查该文件是否存在,并且是否已完全写入。但是
f.read()
能解决我的问题吗?(未冲洗缓冲区的问题)谢谢,这就是我要找的。我已经使用pyinotify来监视FS更改,但我没有想到要将它用于这个非常简单的任务。