簡體   English   中英

Python NamedTemporaryFile已刪除而不關閉它

[英]Python NamedTemporaryFile deleted without closing it

我正在使用ZOPE和Python 2.4,並且根據NamedTemporaryFile遇到問題。 我讀到該文件在關閉時會被刪除,但是無論如何我的文件都會被刪除。 我有一個函數,可以使用Python的threading.Thread將一些xml規范寫入文件。 如果線程完成,則將文件名寫入會話變量。 我有另一個函數,應該在線程完成后打開文件。 這是一個JS函數,每隔10秒檢查一次狀態是否為true。 到目前為止,此功能正常運行,但是當我嘗試通過文件名打開文件時,該文件已被刪除。

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是沒有選擇的。

您將忽略 MyThread.__init__()zfsf對象; *args保持不變。

因為您正在運行的線程沒有在打開的文件對象上添加其他引用,所以在startWorker函數完成時,不再有剩余的對象引用,它們將被刪除,並帶有磁盤上的文件。

根據文檔 ,此文件將被“刪除”兩次;

它將在關閉后立即銷毀(包括在垃圾回收對象時的隱式關閉)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM