处理正在写入的文件是否在外部删除的 pythonic 方法



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

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

是否有任何pythonic方法可以处理此问题,而不是在每次写入操作之前检查文件是否存在并创建一个。

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

最新更新