Подтвердить что ты не робот

Создавать и читать из tempfile

В любом случае я могу писать в tempfile и включать его в команду, а затем закрыть/удалить. Я хотел бы выполнить команду, например: some_command/tmp/some-temp-file.
Большое спасибо заранее.

import tempfile
temp = tempfile.TemporaryFile()
temp.write('Some data')
command=(some_command temp.name)
temp.close()
4b9b3361

Ответ 1

Если вам нужен временный файл с именем, вы должны использовать функцию NamedTemporaryFile. Затем вы можете использовать temp.name. Читать http://docs.python.org/library/tempfile.html для деталей.

Ответ 2

Полный пример.

import tempfile
with tempfile.NamedTemporaryFile() as temp:
    temp.write('Some data')
    if should_call_some_python_function_that_will_read_the_file():
       temp.seek(0)
       some_python_function(temp)
    elif should_call_external_command():
       temp.flush()
       subprocess.call(["wc", temp.name])

Обновление. Как упоминалось в комментариях, это может не работать в Windows. Используйте это решение для Windows

Ответ 3

Попробуйте следующее:

import tempfile
import commands
import os

commandname = "cat"

f = tempfile.NamedTemporaryFile(delete=False)
f.write("oh hello there")
f.close() # file is not immediately deleted because we
          # used 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 может быть достаточно для ваших целей.

Ответ 5

Вы можете попытаться скомпилировать этот файл и выполнить байт-код

http://docs.python.org/library/compiler.html

Но компилятор был удален в Python 3.0