[英]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.