如何检测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 闪存驱动器来解决此问题。
我在 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 闪存驱动器来解决此问题。