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

3

我在Arch Linux上使用Python 3.8。我使用shutil.copytree将文件夹复制到USB键中。 当我在复制后检查USB时,文件夹被正确地复制了,但是我发现我的带有闪烁LED的USB仍在写入。 如果我在灯光停止之前弹出我的USB并重新连接它,我会发现文件夹没有完全复制。 意味着我的操作系统(Arch Linux)认为复制已完成,但实际上并没有。 有任何想法吗?

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)

这个调用之后的代码会继续执行,即使它没有完成复制。
1个回答

0

看起来复制逻辑上已经完成,但还没有完全写入物理 USB 闪存驱动器。也就是说,您的操作系统缓存了一些从复制中获取的数据,并且实际上会在稍后的时间将其写入驱动器,但肯定在卸载驱动器之前。

要检查是否是这种情况,您可以在代码通过 shutil.copytree 后移动时检查(无论是在 Python 中还是通过其他程序)。如果已经完成,则问题几乎肯定是 USB 闪存驱动器未安全弹出。

您应该能够通过卸载(即安全弹出)USB 闪存驱动器来解决此问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接