Ecco il mio codice di esempio:non può rimuovere un file che ha creato da `tempfile.mkstemp()` su Windows
import os
from tempfile import mkstemp
fname = mkstemp(suffix='.txt', text=True)[1]
os.remove(fname)
Quando eseguo sul mio Linux, funziona benissimo. Ma quando l'eseguo sul mio Windows XP utilizzando Python 3.4.4, ha sollevato il seguente errore:
Traceback (most recent call last):
File "C:\1.py", line 5, in <module>
os.remove(fname)
PermissionError: [WinError 32] The process cannot access the file because it is being used by another process: 'C:\\DOCUME~1\\IEUser\\LOCALS~1\\Temp\\tmp3qv6ppcf.txt'
Tuttavia, quando uso tempfile.NamedTemporaryFile()
per creare un file temporaneo e chiuderlo, rimosso automaticamente.
Perché Windows non può rimuovere i file creati da mkstemp
? Dove sto sbagliando?
Hai provato chiudendola prima? –
@ IgnacioVazquez-Abrams: Eh? Dove l'ho aperto? Non è 'mkstemp()' basta creare il file? Non c'è 'open()' nel mio codice e 'fname' è un oggetto stringa. –
Si noti che mkstemp() restituisce una ** tupla ** con un handle di file aperto. Fino a quando non chiudi quella maniglia il file è in uso (... con un altro processo: il tuo). Funziona su Windows a causa di come funziona os.remove() (Su Windows, il tentativo di rimuovere un file che è in uso causa un'eccezione da sollevare, su Unix, la voce della directory viene rimossa ma la memoria allocata al file non è reso disponibile fino a quando il file originale non è più in uso_). –