如何检测shutil.copytree复制完成?

How to detect shutil.copytree is done copying?

我在 archlinux 上使用 python 3.8。我使用 shutil.copytree 复制一个文件夹 到一个USB密钥。 当我在复制后检查到 USB 时,文件夹被正确复制,但我看到我的 USB 钥匙有一个滴答的 LED 仍在写入。 如果我在滴答结束前弹出我的 USB 密钥并重新连接它,我会看到文件夹没有完全复制。 意思是我的OS(archlinux)认为复制完成了,其实没有。 有什么想法吗?

def copytree(self,src, dst):
    """
        This method copies an entire folder recusively from the src to dst path
    """

    for item in os.listdir(src):
        s = os.path.join(src, item)
        d = os.path.join(dst, item)
        if os.path.isdir(s):
            shutil.copytree(s, d)
        else:
            shutil.copy2(s, d)

即使没有完成复制,此调用后的代码也会继续。

好像逻辑上拷贝完成了,但是还没有完全写入物理U盘。也就是说,您的 OS 已经缓存了副本中的一些数据,稍后会实际将其写入驱动器,但肯定是在卸载驱动器之前。

要检查是否是这种情况,您可以检查(在 Python 内或通过其他程序)一旦代码移动到 shutil.copytree 之后复制是否已完成。如果有,那么问题几乎可以肯定是U盘没有安全弹出。

您应该可以通过在移除之前卸载(即安全弹出)USB 闪存驱动器来解决此问题。