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