Django奇怪的子进程问题

时间:2010-07-20 11:51:59

标签: django apache2 subprocess mod-wsgi pdflatex

如果这是一个重复的问题,我很抱歉,但在搜索了3个页面中搜索“django subprocess”之后,我找不到我特定问题的答案。

我正在尝试在pdflatex文件上运行tex,但由于某种原因,在Django中它不会产生任何结果。但它在常规python脚本中运行得很好。我在这里省略了大部分代码,但这基本上是重要的一点。我正在使用mod_wsgi在apache2上运行它,我怀疑它可能是一个与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)

编辑: 这个问题的解决方案非常简单。我只想在这里添加它,所以每个遇到这个问题的人都可以找到它。基本上它涉及使用WSGIDaemonProcess配置指令将站点作为不同的用户而不是www-data运行。这是一个最小配置:

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 个答案:

答案 0 :(得分:1)

在命令中指定'pdflatex'的绝对路径。 Apache用户PATH可能与您的个人帐户不在同一目录中。此外,Apache作为特殊用户运行,不会对您可以的位置具有写访问权限。建议您使用mod_wsgi守护程序模式并指定该守护进程按您而不是Apache用户运行。阅读mod_wsgi网站上的文档,了解如何做到这一点。