Мне нужно запустить процесс pdftk при обслуживании веб-запроса в Django и дождаться его завершения.Мой текущий код pdftk выглядит так:
proc = subprocess.Popen(["/usr/bin/pdftk",
"/tmp/infile1.pdf",
"/tmp/infile2.pdf",
"cat", "output", "/tmp/outfile.pdf"])
proc.communicate()
Это работает нормально, пока я выполняю на сервере dev (работающем как пользователь www-data
).Но как только я переключаюсь на mod_wsgi, ничего не меняя, код висит на proc.communicate()
, а «outfile.pdf» остается как дескриптор открытого файла нулевой длины.
Я попробовал нескольковарианты вызова подпроцесса (а также простой старой os.system) - установка stdin / stdout / stderr в PIPE или в разные дескрипторы файлов ничего не меняет.Использование «shell = True» предотвращает зависание proc.communicate()
, но затем pdftk не может создать выходной файл, как в devserver, так и в mod_wsgi. Это обсуждение , по-видимому, указывает на то, что с сигналами ОС и pdftk может происходить более глубокое вуду, которое я не понимаю.
Есть ли обходные пути, чтобы заставить вызов подпроцесса, как этот, работатьправильно под wsgi?Я избегаю использовать PyPDF для объединения файлов pdf, потому что мне приходится объединять достаточно большое количество файлов (несколько сотен), чтобы ему не хватало памяти (PyPDF должен сохранять все исходные файлы pdf открытыми в памяти при их объединении).
Я делаю это под последние Ubuntu, питоны 2.6 и 2.7.