You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中tempfile临时文件复制与操作问题求助

解决Python临时文件复制时的进程占用问题

方案一:使用NamedTemporaryFile并保留文件

tempfile.TemporaryFile在Windows下默认生成无可见文件名的临时文件,且文件被打开时处于独占锁定状态。改用NamedTemporaryFile并设置delete=False,可创建带可见文件名的临时文件,关闭后不会自动删除,操作完成后手动清理即可。

示例代码:

import tempfile
import os
import shutil

# 创建保留文件名的临时文件
with tempfile.NamedTemporaryFile(delete=False) as f:
    f.write(b"Testing code")
    # 确保缓冲区内容写入磁盘,避免复制到空文件
    f.flush()

# 执行复制操作(此时文件已关闭,无进程占用冲突)
shutil.copy(f.name, "./test_copy.txt")

# 手动删除临时文件,完成清理
os.unlink(f.name)

方案二:直接复制文件对象(无需关闭文件)

如果不想提前关闭临时文件,可以用shutil.copyfileobj直接复制打开的文件对象,绕开对文件名的系统级访问,从根本上避免锁定冲突。

示例代码:

import tempfile
import shutil

f = tempfile.TemporaryFile()
try:
    f.write(b"Testing code")
    # 移到文件开头,准备读取内容
    f.seek(0)
    # 直接将临时文件的内容复制到目标文件
    with open("./test_copy.txt", "wb") as target:
        shutil.copyfileobj(f, target)
finally:
    # 关闭临时文件,自动触发删除
    f.close()

原代码报错原因

在Windows系统中,tempfile.TemporaryFile创建的文件会被当前进程独占锁定,此时用os.system调用系统copy命令,外部进程无法访问该文件。而如果调用close(),TemporaryFile会立即删除文件,导致后续操作找不到目标。

内容的提问来源于stack exchange,提问作者sathishkumar P

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 05:15:09