【发布时间】:2013-04-01 19:14:28
【问题描述】:
tempfile.NamedTemporaryFile()的描述说:
如果 delete 为真(默认值),则文件一经删除即被删除 已关闭。
在某些情况下,这意味着文件在
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__() 方法是
调用解释器退出时仍然存在的对象。" 所以
到目前为止,一切都与文档一致。
但是,我对此的含义感到困惑。如果不是 保证文件对象在解释器退出时关闭,可以吗 可能发生某些数据已成功写入 即使程序正常退出,(缓冲的)文件对象也会丢失, 因为它仍然在文件对象的缓冲区中,并且文件对象 从来没有关闭过?
不知何故,这对我来说似乎不太可能和非 Pythonic,以及 open() 文档也不包含任何此类警告。所以我 (暂时)得出结论,文件对象毕竟是保证 关闭。
但是这个魔法是怎么发生的,为什么NamedTemporaryFile()不能用
确保文件被删除的相同魔法?
编辑: 请注意,我在这里不是在谈论文件 descriptors(由操作系统缓冲并在程序退出时由操作系统关闭),而是关于 Python 文件可以实现自己的缓冲的对象。
【问题讨论】:
-
这篇文章似乎包含很多假设和论据,而实际问题很少。
标签: python file-io destructor