一个python进程正在写入文件,并且该文件已被外部进程删除/移动(在我的情况下为cron作业)。
python进程将继续执行而没有任何错误(预期是因为它正在被写入缓冲区而不是文件,并且将在f.close()
之后被刷新)。但是在这种情况下,将不会创建任何新文件,并且缓冲区将被静默丢弃(如果我错了,请纠正我)。
是否有任何pythonic方式来处理此问题,而不是在每次写操作之前检查文件是否存在并创建文件(如果不存在)。
答案 0 :(得分:1)
由于问题与特定语言无关,因此没有“ pythonic”方法。这是一个操作系统问题。因此,对于MS Windows,答案将与针对Linux之类的UNIX(如Linux或macOS)有所不同。为了有效地做到这一点,需要使用诸如Linux inotify API之类的工具。在OS之类的任何UNIX上均可使用的更简单方法是打开文件,然后调用os.fstat()
并记住返回对象的st_ino
成员。然后定期调用路径名上的os.stat()
并将其st_ino
的值与先前保存的值进行比较。如果更改,或者os.stat()
调用失败,则说明您要写入的文件名不再是同一文件。