Python NamedTemporaryFile 已删除但未关闭

Python NamedTemporaryFile deleted without closing it

我正在使用 ZOPE 和 Python 2.4,根据 NamedTemporaryFile,我遇到了问题。我读到文件在关闭时被删除,但不知何故我的文件被删除了,即使它没有。 我有一个函数,可以将一些 xml 规范写入具有 Python 的 threading.Thread 的文件。如果线程完成, 文件名被写入会话变量。我有另一个函数应该在线程完成时打开文件。这是一个 JS 函数,每 10 秒检查一次状态是否为真。到目前为止这是有效的,但是当我尝试通过文件名打开文件时,它已经被删除了。

def startWorker(self):    
    ts = time.time()
    self.threadID = ts
    sf = tempfile.NamedTemporaryFile("w+b", prefix=self.threadID, suffix=".zip", dir = "/test/tmp/")
    zf = zipfile.ZipFile(sf, "w", zipfile.ZIP_DEFLATED)
    mythread = self.MyThread(target, self.threadID, zf, sf)
    mythread.join()            
    success = mythread.getSuccess()
    if success:
        self.setSessionVar('status', 'true')
        self.setSessionVar('filename', zf.filename)


class MyThread(threading.Thread):
    def __init__(self, target, threadID, *args):
        self.__threadID = threadID
        self.__target = target
        self.__zf = zf
        self.__sf = sf
        self.__args = args
        threading.Thread.__init__(self, name=self.__threadID)
        self.start()

    def run(self): 
        try:
            self.zfout = self.__target(self.__zf, self.__sf, *self.__args)
            self.__success = True
            self.stop()
        except:
            self.stop()

    def stop(self):                       
        self.__keepAlive = False           

    def getsucces(self):
        return self.__success


def getFile(self): #JS function that is called every 10 sec
    filename = self.getSessionVar('filename', None)
    if self.getSessionVar('status', None) = 'true':
        open(filename) # file is already deleted here
    else:
        #do something

任何人都可以告诉我如何告诉 Python 不要删除文件或帮助我了解 Python 如何处理临时文件吗? 我正在使用 python 2.4,因此无法选择 NamedTemporaryFile 中的 delete=false。

忽略了 zfsf 对象 MyThread.__init__()*args 保持不变。

因为您的 运行 线程没有向打开的文件对象添加额外的引用,所以当 startWorker 函数完成时,不再有对对象的引用,它们将被删除,采取磁盘上的文件。

根据 documentation 此文件将被删除 "two" 次;

It will be destroyed as soon as it is closed (including an implicit close when the object is garbage collected).