¿Hay una forma multiplataforma de obtener la ruta al tempdirectorio 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 tempdirectorio 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:
TMPDIRvariable de entorno.TEMPvariable de entorno.TMPvariable de entorno.Wimp$ScrapDirvariable de entorno.C:\TEMP, C:\TMP, \TEMP, y \TMP, en ese orden./tmp, /var/tmpy /usr/tmp, en ese orden./var/folders/<garbage/here>lugar de /tmpporque así es como $TMPDIRse 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ó.