Pregunta

  1. He creado un archivo temporal.
  2. añadido algunos datos en el archivo creado.
  3. guardado y luego tratar de eliminarlo.

Pero estoy WindowsError. He cerrado el archivo después de editarlo. ¿Cómo puedo comprobar la otro proceso está accediendo al archivo.

C:\Documents and Settings\Administrator>python
Python 2.6.1 (r261:67517, Dec  4 2008, 16:51:00) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import tempfile
>>> __, filename = tempfile.mkstemp()
>>> print filename
c:\docume~1\admini~1\locals~1\temp\tmpm5clkb
>>> fptr = open(filename, "wb")
>>> fptr.write("Hello World!")
>>> fptr.close()
>>> import os
>>> os.remove(filename)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
WindowsError: [Error 32] The process cannot access the file because it is being used by
       another process: 'c:\\docume~1\\admini~1\\locals~1\\temp\\tmpm5clkb'
¿Fue útil?

Solución

A partir de la documentación de :

  

mkstemp () devuelve una tupla que contiene un identificador de nivel de sistema operativo en un archivo abierto (como sería devuelto por os.open ()) y el nombre de ruta absoluta de ese archivo, en ese orden. Nuevo en la versión 2.3.

Por lo tanto, los retornos mkstemp tanto el identificador de archivo del sistema operativo a y el nombre de archivo del archivo temporal. Cuando se vuelva a abrir el archivo temporal, el identificador de archivo devuelto original todavía está abierto (nadie que deje de abrir dos o más veces el mismo archivo en el programa).

Si desea operar en ese identificador de archivo del sistema operativo como un objeto de archivo pitón, se puede:

>>> __, filename = tempfile.mkstemp()
>>> fptr= os.fdopen(__)

y luego continuar con su código normal.

Otros consejos

El archivo está todavía abierto. Haga lo siguiente:

fh, filename = tempfile.mkstemp()
...
os.close(fh)
os.remove(filename)

Creo que necesita para liberar el fptr para cerrar el archivo limpiamente. Pruebe a establecer fptr en Ninguno.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top