我現在有強大的原子文件複製
def _atomic_copyfile(src, dst, overwrite):
with tempfile.NamedTemporaryFile(dir=os.path.dirname(dst),
delete=False) as tmp_h:
with open(src, 'rb') as src_fd:
shutil.copyfileobj(fsrc=src_fd,
fdst=tmp_h)
if overwrite:
# works both on Windows and Linux from Python 3.3+, os.rename raises an
# exception on Windows if the file exists
os.replace(src=tmp_h.name,
dst=dst)
else:
if not os.path.exists(dst):
os.rename(src=tmp_h.name,
dst=dst)
如何讓我的臨時文件tmp_h
自動,如果有異常拋出或去除一個信號被捕獲?
請注意,我不能使用delete=True
,因爲臨時文件已重命名。
用大'try/except'保護整個塊並嘗試刪除'tmp_h.name'(保護由異常處理程序移除) –