文件复制完成?

时间:2010-06-07 12:23:47

标签: python file-io

在Linux中,如何在阅读之前知道文件是否已完成复制?在Windows中,引发OSError。

2 个答案:

答案 0 :(得分:1)

在Linux中,你可以在另一个进程正在写入文件时打开一个文件,而不会抛出OSError,所以一般来说,你无法确定对方是否已完成对该文件的写入。不过你可以尝试一些黑客攻击:

  1. 您可以定期检查文件大小,以查看自上次检查后是否增加了文件大小。如果它没有增加,比如五秒钟,那么可能可以安全地假设副本已经完成。我说可能,因为在所有情况下都不是这样。如果写入文件的其他进程因任何原因被阻止,它可能会暂时停止写入该文件并在以后恢复。因此,这不是100%万无一失,但如果系统永远不会承受拖延写入过程的繁重负载,则可能适用于本地文件副本。

  2. 您可以检查fuser的输出(这是一个shell命令),它将列出保存给定文件名的文件句柄的所有文件的进程ID。如果此列表包含除您之外的任何进程,则可以假定复制过程尚未完成。但是,您必须确保在目标系统上安装了fuser才能使其正常工作。

答案 1 :(得分:1)

您可以使用inotify机制(通过pyinotify)来捕获CREATE,WRITE,CLOSE等事件,并根据它们可以假设副本已完成或不完成。

但是,由于您没有提供有关您尝试做什么的详细信息,我无法确定inotify是否适合您(顺便说一句,inotify是特定于Linux的,因此您无法在Windows或其他平台上使用它)