Existe uma maneira multiplataforma de obter o caminho para o temp
diretó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 temp
diretó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:
TMPDIR
variável de ambiente.TEMP
variável de ambiente.TMP
variável de ambiente.Wimp$ScrapDir
variável de ambiente.C:\TEMP
, C:\TMP
, \TEMP
, e \TMP
, nessa ordem./tmp
, /var/tmp
e /usr/tmp
, nessa ordem./var/folders/<garbage/here>
vez de /tmp
porque é assim que $TMPDIR
está 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 systemd
fazem. 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.