2013-03-23 67 views
2

我正在使用tempfile.NamedTemporaryFile()來存儲一些文本,直到程序結束。在Unix上沒有任何問題,但在Windows上,返回的文件無法讀取或寫入:python提供Errno 13.唯一的方法是設置delete=False並手動刪除文件os.remove()。爲什麼?無法訪問使用tempfile創建的臨時文件

+0

你能告訴我們你使用它的代碼嗎?需要'delete = False'作爲解決方法意味着它將被刪除,因爲您關閉了該文件。 – 2013-03-23 15:10:17

+0

好的,我發現了這個問題。有時候文件需要被刪除,爲此我使用'open(tempfile.name,「w」)。close()'。這會導致IOError,因爲該文件在創建後只能打開一次。現在,如何刪除其內容而無需再次打開它? – Rnhmjoj 2013-03-23 17:14:51

+0

我想你想*截斷*文件;調用'.seek(0)'然後'.truncate()'。 – 2013-03-23 17:44:40

回答

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

相關問題