Python中tempfile.mkstemp创建的临时文件自动消失,如何保留?
问题解答
这个情况我之前也碰到过,给你理清楚原因和解决办法:
为什么文件会自动消失?
这确实是有意设计的——你用的tempfile.TemporaryDirectory核心功能就是:当Python进程退出(或者它的上下文管理器块结束)时,自动删除整个目录及其下所有内容,不管里面的文件是用mkstemp还是其他方式创建的。哪怕mkstemp的文档明确说明用户需自行删除文件,但架不住它所在的整个目录被TemporaryDirectory彻底清理了,所以文件自然就跟着消失了。
如何保留文件用于调试?
给你几个实用的方案:
方案1:直接把临时文件放到固定调试目录
放弃将mkstemp生成的文件放在TemporaryDirectory里,直接指定一个你专门用于调试的固定目录,比如:
import tempfile # 替换成你自己的调试目录路径 debug_dir = "/path/to/your/debug-folder" fd, file_path = tempfile.mkstemp(prefix="out_", dir=debug_dir) # 后续业务操作...
这种方式下,文件不会被任何自动清理机制删除,进程退出后能稳稳留在调试目录里。
方案2:关闭TemporaryDirectory的自动清理
如果你一定要沿用TemporaryDirectory的结构,可以在创建它时设置delete=False,关闭自动删除功能:
import tempfile with tempfile.TemporaryDirectory(dir="/asdf", delete=False) as tempdir: fd, file_path = tempfile.mkstemp(dir=tempdir, prefix="out_") # 后续业务操作...
这样进程退出后,整个tempdir目录和里面的所有文件都会保留下来。不过要注意:之后你需要手动删除这个目录,不然会一直占用磁盘空间。
方案3:复制需要保留的文件到固定位置
如果不想改动原有的目录结构,也可以在进程退出前,把需要调试的文件复制到另一个固定目录:
import tempfile import shutil debug_dir = "/path/to/your/debug-folder" with tempfile.TemporaryDirectory(dir="/asdf") as tempdir: fd, file_path = tempfile.mkstemp(dir=tempdir, prefix="out_") # 复制文件到调试目录留存 shutil.copy(file_path, debug_dir) # 后续业务操作...
这种方式既保留了TemporaryDirectory自动清理的特性,又能把需要的文件留存下来用于调试。
内容的提问来源于stack exchange,提问作者Hinton
相关产品推荐
相关产品推荐

