Существует ли кроссплатформенный способ получения пути к tempкаталогу в Python 2.6?
Например, под Linux это было бы /tmp, а под XP C:\Documents and settings\[user]\Application settings\Temp.
Существует ли кроссплатформенный способ получения пути к tempкаталогу в Python 2.6?
Например, под Linux это было бы /tmp, а под XP C:\Documents and settings\[user]\Application settings\Temp.
Ответы:
Это был бы модуль временного файла .
Он имеет функции для получения временного каталога, а также имеет несколько ярлыков для создания временных файлов и каталогов, названных или безымянных.
Пример:
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
Для полноты, вот как он ищет временный каталог, согласно документации:
TMPDIRпеременной среды.TEMPпеременной среды.TMPпеременной среды.Wimp$ScrapDirпеременной среды.C:\TEMP, C:\TMP, \TEMPи \TMP, в таком порядке./tmp, /var/tmpи /usr/tmp, в таком порядке.tempfile.gettempdir()разрешается в C:\users\user\AppData\Local\Temp. К сожалению, долгий путь.
Это должно делать то, что вы хотите:
print tempfile.gettempdir()
Для меня на моей коробке Windows, я получаю:
c:\temp
и на моей коробке Linux я получаю:
/tmp
Я использую:
from pathlib import Path
import platform
import tempfile
tempdir = Path("/tmp" if platform.system() == "Darwin" else tempfile.gettempdir())
Это происходит потому , что на MacOS, т.е. Дарвина, tempfile.gettempdir()и os.getenv('TMPDIR')возвращает значение , такие как '/var/folders/nj/269977hs0_96bttwj2gs_jhhp48z54/T'; это то, что я не всегда хочу.
Самый простой способ, основанный на комментариях и ответах @ nosklo :
import tempfile
tmp = tempfile.mkdtemp()
Но если вы хотите вручную контролировать создание каталогов:
import os
from tempfile import gettempdir
tmp = os.path.join(gettempdir(), '.{}'.format(hash(os.times())))
os.makedirs(tmp)
Таким образом, вы можете легко убирать за собой, когда вы закончите (для конфиденциальности, ресурсов, безопасности и т. Д.) С помощью:
from shutil import rmtree
rmtree(tmp, ignore_errors=True)
Это похоже на то, что делают такие приложения, как Google Chrome и Linux systemd. Они просто используют более короткий шестнадцатеричный хэш и специфичный для приложения префикс, чтобы «рекламировать» свое присутствие.
tempfile.mkdtemp()вместо этого
mkdtemp()вы предложили.