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:
- El directorio nombrado por la variable de entorno
TMPDIR
. - El directorio nombrado por la variable de entorno
TEMP
. - El directorio nombrado por la variable de entorno
TMP
. - 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.
- En RiscOS , el directorio nombrado por la variable de entorno
- 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!