应用程序A(在我的控制之外)将文件写入目录。写完文件之后,我想用我的python脚本将其备份到其他地方。
问题:如何确定文件已完成或者应用程序A仍在编写文件以便我应该等到文件完成?我担心我可以复制部分文件....
我想使用这个函数shutil.copyfile(src,dst)
,但我不知道它是否安全,或者我应该检查文件以其他方式复制。
一般来说,你不能。
因为您没有解决问题所需的信息。
如果您必须知道文件已完全传输/创建/写入/成功,则创建者必须以某种方式向您发送信号,因为只有创建者才具有该信息。从接收方来看,通常无法推断文件已完全传输。你可以尝试猜测,但就是这样。例如,您通常无法从连接丢失的地方告知完整转移。
所以你需要发件人的某种信号。
一种常见的方法是使用从filename.xfr
到filename
,或从“工作”目录到您正在观看的目录的重命名操作。由于大多数操作系统以原子方式实现此类重命名操作,因此如果发送方仅在成功完成传输时执行重命名,则您将只处理已成功传输的完整文件。
另一个常见的信号是发送一个“完成”标志文件,例如一旦成功发送filename.done
就发送filename
。
由于您不控制发件人,因此无法通过查看文件来可靠地解决此问题。