create python cross-platform temporary-directory

python create file in temp dir



Forma multiplataforma de obtener el directorio temporal en Python (4)

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

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


Ese sería el módulo de docs.python.org/library/tempfile.html .

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 busca el directorio temporal, de acuerdo con la documentación:

  1. El directorio nombrado 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 ubicación específica de la plataforma:
    • En RiscOS , el directorio nombrado por la variable de entorno Wimp$ScrapDir .
    • En 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.

Esto debería hacer lo que quieras:

print tempfile.gettempdir()

Para mí en mi cuadro de Windows, obtengo:

c:/temp

y en mi caja de Linux obtengo:

/tmp


Tomando el bit importante de la answer de @nosklo y agregando un directorio de caja de arena semiprivado:

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

De esta forma, puede limpiar fácilmente después de usted mismo cuando haya terminado (para privacidad, recursos, seguridad, lo que sea) con:

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

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


Yo suelo:

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

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