Я работаю с ZOPE и Python 2.4, и у меня есть проблема в соответствии с NamedTemporaryFile. Я прочитал, что файл удален, когда он закрыт, но каким-то образом мой файл удаляется, даже если это не так. У меня есть функция, которая записывает некоторые спецификации xml в файл с потоком Python. Thread. Если поток завершен, имя файла записывается в переменную сеанса. У меня есть еще одна функция, которая должна открыть файл, когда поток будет завершен. Это функция JS, которая проверяет каждые 10 секунд, если статус имеет значение true. Это работает до сих пор, но когда я пытаюсь открыть файл по его имени файла, он уже удален.Python 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 является обработка TempFiles? Я работаю с python 2.4, поэтому delete = false в NamedTemporaryFile нет опции.
Спасибо, сейчас работает! –
Мне очень жаль, что я был счастлив поститься. Я изменил свой код выше и все еще файл удален. Может быть, причина в том, что я останавливаю тему? –
@ user3891252: Да, вы останавливаете «мифот», почему вы это делаете, если хотите продолжить? Между прочим, я бы не использовал здесь нить. Я бы создал новый временный каталог и периодически выполнял бы удаление таких временных каталогов автоматически, если они старше заданного временного предела. –