我正在使用ZOPE和Python 2.4,根据NamedTemporaryFile我遇到了问题。我读到该文件在关闭时被删除,但不知怎的,我的文件被删除了,即使它不是。 我有一个函数,它使用Python的threading.Thread将一些xml规范写入文件。如果线程完成, 文件名被写入会话变量。我有另一个函数,应该在线程完成时打开文件。它是一个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中删除= false是没有选择的。
答案 0 :(得分:3)
您忽略 zf
中的sf
和MyThread.__init__()
个对象; *args
未受影响。
因为正在运行的线程没有添加对打开文件对象的其他引用,所以当startWorker
函数完成时,没有更多的引用留给对象并且它们被删除,带有磁盘文件它们。
答案 1 :(得分:1)
根据documentation,有"两个"次此文件将被删除;
它会在关闭时被销毁(包括隐含的 当对象被垃圾收集时关闭。)