2009-05-11 8 views
155

¿Existe alguna forma de plataforma cruzada para obtener la ruta al directorio temp en Python 2.6?Forma de plataforma cruzada para obtener el directorio temporal en Python

Por ejemplo, en Linux que sería /tmp, mientras que en XP C:\Documents and settings\[user]\Application settings\Temp.

+1

Consulte el módulo tempfile en http://docs.python.org/library/tempfile.html. –

+0

no es un pythonist, pero debe usar [estos] (http://docs.python.org/library/tempfile.html#tempfile.mkdtemp) métodos para crear archivos/directorios temporales – skrat

Respuesta

236

Ese sería el módulo tempfile.

Tiene funciones para obtener el directorio temporal, y también tiene algunos accesos directos para crear archivos temporales y directorios en él, ya sea con nombre o sin nombre.

Ejemplo:

import tempfile 

print tempfile.gettempdir() # prints the current temporary directory 

f = tempfile.TemporaryFile() 
f.write('something on temporaryfile') 
f.seek(0) # return to beginning of file 
print f.read() # reads data back from the file 
f.close() # temporary file is automatically deleted here 

Para completar, así es como se busca el directorio temporal, de acuerdo con la documentación:

  1. El directorio indicado por la variable de entorno TMPDIR.
  2. El directorio nombrado por la variable de entorno TEMP.
  3. El directorio nombrado por la variable de entorno TMP.
  4. Una localización específica de la plataforma:
    • En riscos, el directorio indicado por la variable de entorno Wimp$ScrapDir.
    • En de Windows, los directorios C:\TEMP, C:\TMP, \TEMP y \TMP, en ese orden.
    • En todas las demás plataformas, los directorios /tmp, /var/tmp y /usr/tmp, en ese orden.
  5. Como último recurso, el directorio de trabajo actual.
+4

Para mí, OSX lo está poniendo '/var/folders/ 'en lugar de'/tmp' porque así es como se establece '$ TMPDIR'. Ver [aquí] (http://apple.stackexchange.com/questions/3949/how-do-i-find-out-the-system-temporary-directory). –

43

Esto debería hacer lo que quiera:

print tempfile.gettempdir() 

Para mí en mi caja de Windows, consigo:

c:\temp 

y en mi máquina Linux me sale:

/tmp 
2

Tomando el bit importante de @ nosklo's answer y agregando un mensaje semiprivado caja de arena dir:

import os 
from tempfile import gettempdir 
tmp = os.path.join(gettempdir(), '.{}'.format(hash(os.times()))) 
os.makedirs(tmp) 

De esta manera se puede limpiar fácilmente después de ti mismo cuando haya terminado (para mayor privacidad, los recursos, la seguridad, lo que sea) con:

from shutil import rmtree 
rmtree(tmp, ignore_errors=True) 

Esto es similar a lo que aplicaciones como Google Chrome y Linux systemd do. Solo usan un hash hexadecimal más corto y un prefijo específico de la aplicación para "anunciar" su presencia.

4

que utilizo:

import platform 
import tempfile 

tempdir = '/tmp' if platform.system() == 'Darwin' else tempfile.gettempdir() 

Esto es porque en MacOS, es decir, Darwin, tempfile.gettempdir() y os.getenv('TMPDIR') devolver un valor tal como '/var/folders/nj/269977hs0_96bttwj2gs_jhhp48z54/T'; ¡es uno que no quiero!

Cuestiones relacionadas