Чи існує міжплатформний спосіб отримати шлях до 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.
Відповіді:
Це був би модуль 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змінною середовища.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)
Це схоже на те, що systemdроблять такі програми, як Google Chrome та Linux . Вони просто використовують коротший шістнадцятковий хеш і специфічний для програми приклад, щоб "рекламувати" свою присутність.
tempfile.mkdtemp()замість цього
mkdtemp()запропонованої вами.