[英]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__()
的zf
和sf
對象; *args
保持不變。
因為您正在運行的線程沒有在打開的文件對象上添加其他引用,所以在startWorker
函數完成時,不再有剩余的對象引用,它們將被刪除,並帶有磁盤上的文件。
根據文檔 ,此文件將被“刪除”兩次;
它將在關閉后立即銷毀(包括在垃圾回收對象時的隱式關閉)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.