Сообщить об ошибке.

Функция mkstemp() модуля tempfile в Python

Безопасные временные файлы

Синтаксис:

import tempfile

tempfile.mkstemp(suffix=None, prefix=None, dir=None, text=False)

Параметры:

  • suffix=None - суффикс файла,
  • prefix=None - префикс файла,
  • dir=None - директория для создаваемого файла,
  • text=False - режим открытия файла.

Возвращаемое значение:

Описание:

Функция mkstemp() модуля tempfile создает временный файл наиболее безопасным способом. При создании файла нет условий гонки, при условии, что платформа правильно реализует флаг os.O_EXCL для os.open(). Файл доступен для чтения и записи только под идентификатором пользователя userID его создавшим.

Если платформа использует биты прав доступа, чтобы указать, является ли файл исполняемым, то этот файл никто не сможет исполнить. Дескриптор файла не наследуется дочерними процессами.

В отличие от функции tempfile.TemporaryFile(), пользователь функции tempfile.mkstemp() отвечает за удаление временного файла после его закрытия.

Если аргумент suffix не равен None, то имя временного файла заканчивается указанным суффиксом, иначе суффикса не будет. Функция tempfile.mkstemp() не ставит точку между именем файла и суффиксом. Если это нужно, то поставьте точку в начале суффикса, например '.txt'.

Если аргумент prefix не равен None, то имя временного файла начинается с указанного префикса. В противном случае используется префикс по умолчанию. По умолчанию возвращается значение tempfile.gettempprefix() или tempfile.gettempprefixb(), в зависимости от ситуации.

Если аргумент dir не равен None, то файл будет создан в указанном каталоге. В противном случае используется каталог по умолчанию. Каталог по умолчанию выбирается из списка, зависящего от платформы, но пользователь приложения может контролировать местоположение каталога, устанавливая переменные среды TMPDIR, TEMP или TMP. Таким образом, нет никакой гарантии, что сгенерированное имя файла будет иметь какие-либо приятные свойства, такие как отсутствие необходимости заключать в кавычки при передаче во внешние команды через os.popen().

Если какой-либо из аргументов suffix, prefix и dir не является None, то они должны быть одного типа. Если они являются байтами, возвращаемое имя будет байтовая строка. Если они являются строками, то возвращаемое имя будет строка.

Аргумент text указывает открывать файл в двоичном режиме (по умолчанию) или в текстовом режиме, если text=True. На некоторых платформах это не имеет значения.

Функция tempfile.mkstemp() возвращает кортеж, содержащий дескриптор уровня операционной системы, в открытый файл как было бы возвращено функцией os.open() и абсолютный путь к этому файлу в указанном порядке.

Вызывает событие аудита tempfile.mkstemp с аргументом fullpath.

Примеры:

import tempfile, os

# создаем временный файл
fd, path = tempfile.mkstemp(suffix='.txt', text=True)

print(path)
# /tmp/tmp85r55t1f.txt

# пишем во временный файл
with open(path, 'w') as fpw:
    fpw.write('Привет docs-python.ru.\n')

# файл существует после закрытия
print(os.path.isfile(path))
# True

# дописываем во временный файл
with open(path, 'a') as fpw:
    fpw.write('Привет docs-python.ru еще раз.\n')

# читаем из временного файла
with open(path) as fpr:
    data = fpr.read()

# смотрим что в файле
print(data)
# Привет docs-python.ru.
# Привет docs-python.ru еще раз.

# закрываем дескриптор файла
os.close(fd)

# уничтожаем файл, если юольше не нужен
os.unlink(path)