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

2024-04-20 03:02:32 发布

您现在位置: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()之前缓冲区是否已被刷新?在


Tags: 文件代码程序txtmessagecloseopenfile
3条回答

若要检查某个文件是否存在,请使用os.path.exists或{},如果您要求它是“常规”文件,则可以使用os.path.isfile。在

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

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

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

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

Linux有inotify。您可以编写一个简单的pyinotify脚本来监视目录并对IN_CLOSE_WRITE事件作出反应(这些事件只在文件关闭后发生)。在

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

相关问题 更多 >