Existe uma maneira multiplataforma de obter o caminho para o tempdiretório no Python 2.6?
Por exemplo, no Linux /tmp, enquanto no XP C:\Documents and settings\[user]\Application settings\Temp.
Existe uma maneira multiplataforma de obter o caminho para o tempdiretório no Python 2.6?
Por exemplo, no Linux /tmp, enquanto no XP C:\Documents and settings\[user]\Application settings\Temp.
Respostas:
Esse seria o módulo tempfile .
Possui funções para obter o diretório temporário e também possui alguns atalhos para criar arquivos e diretórios temporários, com ou sem nome.
Exemplo:
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, veja como ele procura o diretório temporário, de acordo com a documentação:
TMPDIRvariável de ambiente.TEMPvariável de ambiente.TMPvariável de ambiente.Wimp$ScrapDirvariável de ambiente.C:\TEMP, C:\TMP, \TEMP, e \TMP, nessa ordem./tmp, /var/tmpe /usr/tmp, nessa ordem./var/folders/<garbage/here>vez de /tmpporque é assim que $TMPDIRestá definido. Veja aqui .
tempfile.gettempdir()resolve para C:\users\user\AppData\Local\Temp. Infelizmente, um longo caminho.
Isso deve fazer o que você deseja:
print tempfile.gettempdir()
Para mim na minha caixa do Windows, recebo:
c:\temp
e na minha caixa Linux eu recebo:
/tmp
Eu uso:
from pathlib import Path
import platform
import tempfile
tempdir = Path("/tmp" if platform.system() == "Darwin" else tempfile.gettempdir())
Isso ocorre no MacOS, ou seja, Darwin, tempfile.gettempdir()e os.getenv('TMPDIR')retorna um valor como '/var/folders/nj/269977hs0_96bttwj2gs_jhhp48z54/T'; é aquele que eu nem sempre quero.
A maneira mais simples, com base no comentário de @ nosklo e resposta do :
import tempfile
tmp = tempfile.mkdtemp()
Mas se você deseja controlar manualmente a criação dos diretórios:
import os
from tempfile import gettempdir
tmp = os.path.join(gettempdir(), '.{}'.format(hash(os.times())))
os.makedirs(tmp)
Dessa forma, você pode facilmente limpar você mesmo quando terminar (por privacidade, recursos, segurança, o que for) com:
from shutil import rmtree
rmtree(tmp, ignore_errors=True)
Isso é semelhante ao que aplicativos como Google Chrome e Linux systemdfazem. Eles apenas usam um hash hex menor e um prefixo específico do aplicativo para "anunciar" sua presença.
tempfile.mkdtemp()vez disso
mkdtemp()você sugeriu.