【发布时间】:2023-04-17 22:55:01
【问题描述】:
我正在编写一个 python 脚本,它在 Linux 上使用 shutil.copyfile() 复制文件。在复制期间,其他进程可能正在尝试读取该文件。以下是否足以确保外部进程不会获得文件的损坏视图?
os.unlink(dest)
shutil.copyfile(src, dest)
也就是说,shutil.copyfile() 是原子的,以至于其他进程在复制操作完成之前无法读取目标文件?
【问题讨论】:
-
最好复制到同目录下的一个临时文件,然后os.rename()。 *ix:这种方式是原子的,即使在 NFS 上也是如此。如果一个或多个进程已经打开了文件,它们将继续看到旧版本,而文件的后续 open() 将看到新内容。