处理从外部删除正在写入的文件的Python方法

时间:2019-09-27 06:31:38

标签: python python-3.x

一个python进程正在写入文件,并且该文件已被外部进程删除/移动(在我的情况下为cron作业)。

python进程将继续执行而没有任何错误(预期是因为它正在被写入缓冲区而不是文件,并且将在f.close()之后被刷新)。但是在这种情况下,将不会创建任何新文件,并且缓冲区将被静默丢弃(如果我错了,请纠正我)。

是否有任何pythonic方式来处理此问题,而不是在每次写操作之前检查文件是否存在并创建文件(如果不存在)。

1 个答案:

答案 0 :(得分:1)

由于问题与特定语言无关,因此没有“ pythonic”方法。这是一个操作系统问题。因此,对于MS Windows,答案将与针对Linux之类的UNIX(如Linux或macOS)有所不同。为了有效地做到这一点,需要使用诸如Linux inotify API之类的工具。在OS之类的任何UNIX上均可使用的更简单方法是打开文件,然后调用os.fstat()并记住返回对象的st_ino成员。然后定期调用路径名上的os.stat()并将其st_ino的值与先前保存的值进行比较。如果更改,或者os.stat()调用失败,则说明您要写入的文件名不再是同一文件。