我正在使用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