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