У меня есть скрипт Python (работающий внутри другого приложения), который генерирует кучу временных изображений. Затем я использую subprocess
для запуска приложения, чтобы просмотреть их.
Когда процесс просмотра изображения существует, я хочу удалить временные изображения.
Я не могу сделать это из Python, поскольку процесс Python мог завершиться до завершения подпроцесса. Т.е. я не могу сделать следующее:
p = subprocess.Popen(["imgviewer", "/example/image1.jpg", "/example/image1.jpg"])
p.communicate()
os.unlink("/example/image1.jpg")
os.unlink("/example/image2.jpg")
.. так как это блокирует основной поток, я не могу проверить, нет ли выхода pid
в потоке и т. Д.
Единственное решение, которое я могу придумать, означает, что я должен использовать shell=True
, которого я бы предпочел избежать:
import pipes
import subprocess
cmd = ['imgviewer']
cmd.append("/example/image2.jpg")
for x in cleanup:
cmd.extend(["&&", "rm", pipes.quote(x)])
cmdstr = " ".join(cmd)
subprocess.Popen(cmdstr, shell = True)
Это работает, но вряд ли изящно ..
По сути, у меня есть фоновый подпроцесс, и я хочу удалить временные файлы при его выходе, даже если процесс Python больше не существует.