Ответ 1
Если вам нужен временный файл с именем, вы должны использовать функцию NamedTemporaryFile
. Затем вы можете использовать temp.name
. Читать
http://docs.python.org/library/tempfile.html для деталей.
В любом случае я могу писать в tempfile и включать его в команду, а затем закрыть/удалить. Я хотел бы выполнить команду, например: some_command/tmp/some-temp-file.
Большое спасибо заранее.
import tempfile
temp = tempfile.TemporaryFile()
temp.write('Some data')
command=(some_command temp.name)
temp.close()
Если вам нужен временный файл с именем, вы должны использовать функцию NamedTemporaryFile
. Затем вы можете использовать temp.name
. Читать
http://docs.python.org/library/tempfile.html для деталей.
Полный пример.
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
Попробуйте следующее:
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
может быть достаточно для ваших целей.
Используйте NamedTemporaryFile
и его член name
. У обычного TemporaryFile
даже не гарантируется наличие имени из-за способа файловых систем Unix.
Вы можете попытаться скомпилировать этот файл и выполнить байт-код
http://docs.python.org/library/compiler.html
Но компилятор был удален в Python 3.0