¿Hay una forma multiplataforma de obtener la ruta al temp
directorio en Python 2.6?
Por ejemplo, bajo Linux sería /tmp
, mientras que bajo XP C:\Documents and settings\[user]\Application settings\Temp
.
¿Hay una forma multiplataforma de obtener la ruta al temp
directorio en Python 2.6?
Por ejemplo, bajo Linux sería /tmp
, mientras que bajo XP C:\Documents and settings\[user]\Application settings\Temp
.
Respuestas:
Ese sería el módulo temporal .
Tiene funciones para obtener el directorio temporal, y también tiene algunos accesos directos para crear archivos y directorios temporales, ya sea con 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:
TMPDIR
variable de entorno.TEMP
variable de entorno.TMP
variable de entorno.Wimp$ScrapDir
variable de entorno.C:\TEMP
, C:\TMP
, \TEMP
, y \TMP
, en ese orden./tmp
, /var/tmp
y /usr/tmp
, en ese orden./var/folders/<garbage/here>
lugar de /tmp
porque así es como $TMPDIR
se configura. Ver aquí .
tempfile.gettempdir()
resuelve C:\users\user\AppData\Local\Temp
. Un camino lamentablemente largo.
Esto debería hacer lo que quieras:
print tempfile.gettempdir()
Para mí en mi caja de Windows, obtengo:
c:\temp
y en mi caja de Linux obtengo:
/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()
y os.getenv('TMPDIR')
devuelve un valor como '/var/folders/nj/269977hs0_96bttwj2gs_jhhp48z54/T'
; Es uno que no siempre quiero.
La forma más simple, basada en el comentario y la respuesta de @ nosklo :
import tempfile
tmp = tempfile.mkdtemp()
Pero si desea 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, puede limpiar fácilmente después de usted mismo cuando haya terminado (por privacidad, recursos, seguridad, lo que sea) con:
from shutil import rmtree
rmtree(tmp, ignore_errors=True)
Esto es similar a lo que hacen 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.
tempfile.mkdtemp()
en su lugar
mkdtemp()
que sugirió.