Странная проблема подпроцесса с Django - PullRequest
1 голос
/ 20 июля 2010

Извините, если это дублирующий вопрос, но после поиска на 3 страницах «подпроцесса django» я, например, не смог найти ответ на свою конкретную проблему.

Я пытаюсь запустить pdflatex на tex файле, но по какой-то причине в Django это ничего не дает. Впрочем, в обычном скрипте Python он работает просто отлично. Я опустил большую часть кода здесь, но это в основном важный момент. Я запускаю это на apache2 с mod_wsgi, и я подозреваю, что это может быть проблема, связанная с разрешениями Apache, хотя и не знаю. Заранее спасибо.

import subprocess
test = subprocess.Popen(['pdflatex','/home/sheepz/test.tex'],shell=True, stdout=subprocess.PIPE)
log = open('/home/sheepz/log.log', 'w')
log.write(str(test.communicate()))
log.close()

the content of the file "log.log":

('This is pdfTeX, Version 3.1415926-1.40.10 (TeX Live 2009/Debian)\n restricted \\write18 enabled.\n**\n! End of file on the terminal... why?\n', None)

EDIT: Решение этой проблемы довольно простое. Я просто хочу добавить это здесь, чтобы каждый, у кого есть проблемы с этим, мог найти это. По сути, это включает в себя запуск сайта от имени другого пользователя, а не www-данных, используя директиву конфигурации WSGIDaemonProcess . Вот минимальная конфигурация:

ServerName www.mysite.com
ServerAlias *mysite.com
WSGIDaemonProcess www.mysite.com user=joe group=joe home=/home/joe/
WSGIProcessGroup www.mysite.com

Также было бы желательно добавить WSGIRestrictStdout Off в ваш httpd.conf, потому что, насколько я понимаю, mod_wsgi игнорирует любой процесс, который пытается использовать stdout. Спасибо, Грэм.

1 Ответ

1 голос
/ 21 июля 2010

Укажите абсолютный путь к pdflatex в команде.Пользователь Apache PATH может не смотреть в те же каталоги, что и ваша личная учетная запись.Кроме того, Apache работает как специальный пользователь, у которого нет прав на запись, где вы можете.Предлагаем вам использовать режим демона mod_wsgi и указать, что этот процесс демона запускается как вы, а не как пользователь Apache.Прочтите документацию на сайте mod_wsgi о том, как это сделать.

...