tempfile.NamedTemporaryFile()的描述是:If delete is true (the default), the file is deleted as soon as it
is closed.
在某些情况下,这意味着在
Python解释器结束。例如,在下运行以下测试时
py.test,临时文件仍保留:from __future__ import division, print_function, absolute_import
import tempfile
import unittest2 as unittest
class cache_tests(unittest.TestCase):
def setUp(self):
self.dbfile = tempfile.NamedTemporaryFile()
def test_get(self):
self.assertEqual('foo', 'foo')
在某种程度上这是有意义的,因为这个程序从来没有显式地
关闭文件对象。唯一能让物体闭合的方法
可能在__del__析构函数中,但是这里的语言
引用声明“不能保证__del__()方法
为解释器退出时仍存在的对象调用。“所以
到目前为止,一切都与文档一致。在
然而,我不明白这意味着什么。如果不是的话
保证文件对象在解释器出口关闭,对吗
可能的情况是某些数据成功写入
(缓冲)文件对象丢失,即使程序正常退出,
因为它仍然在file对象的缓冲区中
从来没关门过?在
不知怎么的,这对我来说似乎不太可能,也不是Python
文档也不包含任何此类警告。所以我
(暂定)得出结论:毕竟,文件对象保证
关闭。在
但是这种魔力是如何发生的,为什么NamedTemporaryFile()不能使用
同样的魔法确保文件被删除?在
编辑:注意,这里我不是在谈论文件描述符(由操作系统缓冲,在程序退出时由操作系统关闭),而是关于Python文件对象,它们可以实现自己的缓冲。在