我正在使用tempfile.NamedTemporaryFile()
來存儲一些文本,直到程序結束。在Unix上沒有任何問題,但在Windows上,返回的文件無法讀取或寫入:python提供Errno 13.唯一的方法是設置delete=False
並手動刪除文件os.remove()
。爲什麼?無法訪問使用tempfile創建的臨時文件
2
A
回答
2
這會導致IOError,因爲文件只能在創建後打開一次。
原因是因爲NamedTemporaryFile
在Windows上創建了帶有FILE_SHARE_DELETE
標誌的文件。在Windows上,創建/打開特定共享標誌文件後,所有後續打開的操作必須通過此共享標誌。 Python的open
函數並不通過FILE_SHARE_DELETE
標誌。有關更多詳細信息和解決方法,請參閱我在How to create a temporary file that can be read by a subprocess?問題上的回答。
1
請看:http://docs.python.org/2/library/tempfile.html
tempfile.NamedTemporaryFile([mode='w+b'[, bufsize=-1[, suffix=''[, prefix='tmp'[, dir=None[, delete=True]]]]]])
該功能正是工作作爲TemporaryFile()確實,除了文件是保證在文件系統中顯示的名稱(在Unix上,該目錄項不在未鏈接)。該名稱可以從文件對象的name屬性中檢索。名稱是否可用於第二次打開文件,而指定的臨時文件仍處於打開狀態時,跨平臺會有所不同(它可以在Unix上使用; 它不能在Windows NT或更高版本中使用)。如果刪除爲真(默認),則該文件在關閉後立即刪除。
+0
我剛剛嘗試過使用TemporaryFile():同樣的問題。問題一定是別的。 – Rnhmjoj 2013-03-23 16:45:30
相關問題
- 1. 無法訪問臨時文件asp.net
- 2. 「hudson.util.IOException2:無法創建臨時文件」
- 3. 無法創建一個臨時文件
- 4. 我無法創建臨時文件
- 5. 無法在Windows上用C++創建臨時文件使用tmpfnam
- 6. 使用(FileStream)創建臨時文件導致「進程無法訪問該文件,因爲它正在被使用」
- 7. 無法訪問剛創建的文件
- 8. 訪問/ tmp /時拒絕創建臨時文件的位置?
- 9. Python - tempfile模塊創建一個無法打開的文件?
- 10. Git difftool問題:無法創建臨時文件
- 11. C#:創建後無法訪問文件
- 12. 使用ActionScript創建臨時XML文件
- 13. MySQL的:無法訪問臨時表
- 14. 無法訪問Java創建的文件 - 有時
- 15. Java創建臨時文件
- 16. 使用exec創建的文件無法在創建後立即訪問?
- 17. 無法使用pyodbc創建表訪問
- 18. 無法在編譯時創建臨時文件
- 19. ASP.NET無法訪問Windows臨時文件夾?
- 20. ASP.NET Web.config加密 - 無法訪問臨時文件
- 21. Scalate和GAE選項org.fusesource.scalate.TemplateException:無法創建臨時文件
- 22. 「無法創建臨時文件輸出中」在運行測試
- 23. WebSphere服務器 - 無法創建臨時文件
- 24. 創建一個php引導文件 - 無法訪問文件
- 25. org.apache.jmeter.report.dashboard.GenerationException:無法創建臨時目錄「temp」
- 26. 無法創建臨時目錄
- 27. 刪除創建的臨時文件
- 28. python xlrd:使用臨時文件將xls轉換爲csv。 Tempfile爲空
- 29. 創建CSV文件時出現偶然IOException'進程無法訪問文件...'
- 30. android webView訪問臨時文件
你能告訴我們你使用它的代碼嗎?需要'delete = False'作爲解決方法意味着它將被刪除,因爲您關閉了該文件。 – 2013-03-23 15:10:17
好的,我發現了這個問題。有時候文件需要被刪除,爲此我使用'open(tempfile.name,「w」)。close()'。這會導致IOError,因爲該文件在創建後只能打開一次。現在,如何刪除其內容而無需再次打開它? – Rnhmjoj 2013-03-23 17:14:51
我想你想*截斷*文件;調用'.seek(0)'然後'.truncate()'。 – 2013-03-23 17:44:40