Forma multiplataforma de obtener el directorio temporal en Python
¿Existe una forma multiplataforma de obtener la ruta al temp
directorio 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 archivo temporal .
Tiene funciones para obtener el directorio temporal y también tiene algunos atajos para crear archivos y directorios temporales 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, según la documentación :
- El directorio nombrado por la
TMPDIR
variable de entorno.- El directorio nombrado por la
TEMP
variable de entorno.- El directorio nombrado por la
TMP
variable de entorno.- Una ubicación específica de la plataforma:
- En RiscOS , el directorio nombrado por la
Wimp$ScrapDir
variable de entorno.- 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.- Como último recurso, el directorio de trabajo actual.
Esto debería hacer lo que quieres:
print(tempfile.gettempdir())
Para mí, en mi caja de Windows, obtengo:
c:\temp
y en mi caja de Linux me sale:
/tmp
Yo suelo:
from pathlib import Path
import platform
import tempfile
tempdir = Path("/tmp" if platform.system() == "Darwin" else tempfile.gettempdir())
Esto se debe a que en MacOS, es decir, Darwin, tempfile.gettempdir()
devuelve os.getenv('TMPDIR')
un valor como '/var/folders/nj/269977hs0_96bttwj2gs_jhhp48z54/T'
; es uno que no siempre quiero.
La forma más sencilla, basada en el comentario y la respuesta de @nosklo :
import tempfile
tmp = tempfile.mkdtemp()
Pero si deseas controlar manualmente la creación de los directorios:
import os
from tempfile import gettempdir
tmp = os.path.join(gettempdir(), '.{}'.format(hash(os.times())))
os.makedirs(tmp)
De esa manera, puedes limpiar fácilmente cuando hayas terminado (por privacidad, recursos, seguridad, lo que sea) con:
from shutil import rmtree
rmtree(tmp, ignore_errors=True)
Esto es similar a lo que systemd
hacen aplicaciones como Google Chrome y Linux. Simplemente usan un hash hexadecimal más corto y un prefijo específico de la aplicación para "anunciar" su presencia.