У меня возникла проблема с созданием временного файла и последующим его выполнением. Мой процесс кажется простым: - создать временный файл с tempfile.NamedTemporaryFile - написать инструкцию Баш в файл - начать подпроцесс, чтобы выполнить созданный файлpython создает временный файл namedtemfile и вызывает подпроцесс вызова
Вот реализация:
from tempfile import NamedTemporaryFile
import os
import subprocess
scriptFile = NamedTemporaryFile(delete=True)
with open(scriptFile.name, 'w') as f:
f.write("#!/bin/bash\n")
f.write("echo test\n")
os.chmod(scriptFile.name, 0777)
subprocess.check_call(scriptFile.name)
I получите OSError: [Errno 26] Text file busy
по подпроцессу check_call. Как использовать файл temp для его выполнения?
закрыть файл? – jester112358
dumb me ... Я ожидал контекста 'with', чтобы закрыть файл для меня, что не так. – jeromes
'' NamedTemporaryFile'' уже открывает файл (см. Https://docs.python.org/2/library/tempfile.html), поэтому я удивлен, что ошибка не возникла в контекст-менеджере. Кроме того, аргумент '' delete = True'' удаляет файл при закрытии соединения, что делает его особенно полезным для его использования позже в подпроцессе. – MrGumble