簡體   English   中英

無法訪問使用 tempfile 創建的臨時文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM