Создание и чтение временного файла
Описание проблемы:
Я пытаюсь создать временный файл с помощью модуля tempfile
, записать в него данные и затем использовать этот файл в качестве аргумента для выполнения команды. После выполнения команды я хочу закрыть и удалить временный файл. Вот пример кода, который я использую:
import tempfile
temp = tempfile.TemporaryFile()
temp.write(b'Some data') # Необходимо указать байты
command = (some_command temp.name) # Здесь возникает проблема с синтаксисом
temp.close()
Однако на данном этапе у меня возникают проблемы с синтаксисом при формировании команды. Кроме того, файл не удается использовать в неподходящем состоянии после записи. Как мне правильно организовать создание временного файла, его использование в команде и последующее удаление?
Спасибо за вашу помощь!
2 ответ(ов)
Если вам нужен временный файл с заданным именем, вы можете использовать функцию NamedTemporaryFile
. Затем вы сможете обратиться к имени файла через temp.name
. Дополнительную информацию можно найти в документации: http://docs.python.org/library/tempfile.html.
Попробуйте следующий код:
import tempfile
import commands
import os
commandname = "cat"
f = tempfile.NamedTemporaryFile(delete=False)
f.write(b"oh hello there")
f.close() # файл не будет удален сразу, потому что мы указали delete=False
res = commands.getoutput("%s %s" % (commandname, f.name))
print(res)
os.unlink(f.name)
Этот код просто выводит содержимое временного файла, но он должен дать вам общее представление о том, как это работает. Обратите внимание, что файл закрывается (f.close()
), прежде чем внешний процесс получит к нему доступ. Это важно — оно гарантирует, что все ваши операции записи правильно завершены (и, в Windows, что файл не заблокирован). Экземпляры NamedTemporaryFile
обычно удаляются сразу после закрытия, поэтому используется параметр delete=False
.
Если вам нужно больше контроля над процессом, вы можете попробовать использовать subprocess.Popen
, но, похоже, что commands.getoutput
может быть достаточным для ваших целей.
Как изменить порядок столбцов в DataFrame?
'pip' не распознан как командa внутреннего или внешнего формата
Почему statistics.mean() работает так медленно?
Преобразование строки даты JSON в datetime в Python
Есть ли разница между поднятием экземпляра класса Exception и самого класса Exception?