我正在使用ZOPE和Python 2.4,并且根据NamedTemporaryFile有个问题。我读到文件在关闭时被删除,但不知何故,即使文件不是,我的文件也被删除。 我有一个函数,用python的threading.Thread将一些xml规范写入一个文件。如果线程完成, 文件名被写入会话变量。我有另一个功能,应该在线程完成时打开文件。这是一个JS函数,如果状态为真,则每10秒检查一次。这是迄今为止的工作,但是当我试图通过它的文件名打开文件时,它已被删除。蟒蛇NamedTemporaryFile删除而不关闭它
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是没有选项的。
现在感谢它的工作! – 2015-02-10 12:51:33
我很抱歉,我认为我很高兴加快速度。我更改了上面的代码,但仍然删除了该文件。难道是因为我停止线程? – 2015-02-10 13:12:56
@ user3891252:是的,你正在停止'mythread',为什么你要这样做,如果你想继续?顺便说一句,我不会在这里使用线程。我会创建一个新的临时目录,并且定期作业会自动删除这些临时目录,如果它们超过了给定的时间限制。 – 2015-02-10 13:17:06