Кросс-платформенный способ получения временного каталога в Python
есть ли кросс-платформенный способ получить путь к temp
4 ответов
что будет tempfile модуль.
он имеет функции для получения временного каталога, а также имеет некоторые ярлыки для создания временных файлов и каталогов в нем, с именем или без имени.
пример:
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
переменные среды. - местоположение платформы:
- On RiscOS, каталог, названный
Wimp$ScrapDir
переменные среды. - On Windows каталоги
C:\TEMP
,C:\TMP
,\TEMP
и\TMP
в этом порядке. - на всех других платформах каталоги
/tmp
,/var/tmp
и/usr/tmp
в этом порядке.
- On RiscOS, каталог, названный
- в крайнем случае, текущий рабочий каталог.
Это должно делать то, что вы хотите:
print tempfile.gettempdir()
для меня на моем окне окна, я получаю:
c:\temp
и на моем Linux box я получаю:
/tmp
Я использую:
import platform
import tempfile
tempdir = '/tmp' if platform.system() == 'Darwin' else tempfile.gettempdir()
это потому, что на MacOS, то есть Дарвин,tempfile.gettempdir()
и os.getenv('TMPDIR')
возвращает значение, например '/var/folders/nj/269977hs0_96bttwj2gs_jhhp48z54/T'
; это то, чего я не хочу!
принимая важный бит от @nosklo's ответ и добавление полу-частной песочницы dir:
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
do. Они просто используют более короткий шестнадцатеричный хэш и префикс приложения, чтобы "рекламировать" свое присутствие.