[英]Can't access temporary files created with tempfile
我正在使用tempfile.NamedTemporaryFile()
來存儲一些文本,直到程序結束。 在 Unix 上工作沒有任何問題,但在 Windows 上,無法讀取或寫入返回的文件:python 提供 Errno 13。唯一的方法是設置delete=False
並使用os.remove()
手動刪除文件。 為什么?
這將導致IOError,因為文件創建后只能打開一次。
原因是因為NamedTemporaryFile
在Windows上創建帶有FILE_SHARE_DELETE
標志的文件。 在Windows上,當使用特定共享標記創建/打開文件時,所有后續打開操作都必須通過此共享標記。 Python的open
函數不是通過FILE_SHARE_DELETE
標志的情況並非FILE_SHARE_DELETE
。 請參閱我關於如何創建可由子進程讀取的臨時文件的答案? 有關更多詳細信息和解決方法的問題。
看看: http : //docs.python.org/2/library/tempfile.html
tempfile.NamedTemporaryFile([mode='w+b'[, bufsize=-1[, suffix=''[, prefix='tmp'[, dir=None[, delete=True]]]]]])
此函數的操作與TemporaryFile()完全相同,只是保證文件在文件系統中具有可見的名稱(在Unix上,目錄條目未取消鏈接)。 可以從文件對象的名稱屬性中檢索該名稱。 在命名的臨時文件仍處於打開狀態時,是否可以使用該名稱第二次打開文件,會因平台而異(可以在Unix上使用; 在Windows NT或更高版本上不能使用 )。 如果delete為true(默認設置),則在關閉文件后立即將其刪除。
感謝@Rnhmjoj,這是一個可行的解決方案:
file = NamedTemporaryFile(delete=False)
file.close()
您必須使用delete
-flag 保留文件,然后在創建后將其關閉。 這樣,Windows 將解鎖文件,您可以使用它來做事!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.