對不起,如果這是一個重複的問題,但在搜索「django子流程」的3個頁面後,我無法找到我的特定問題的答案。Django奇怪的子流程問題
我試圖在tex
文件上運行pdflatex
,但由於某種原因,在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數據。下面是一個最小配置:
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的忽略嘗試使用標準輸出的任何過程。謝謝,格雷厄姆。
你使用什麼操作系統? SE Linux已啓用? – 2010-07-20 12:15:06
Ubuntu 10.04 LTS,所以SELinux默認不安裝。 – 2010-07-20 12:32:36
WSGIRestrictStdout不是必須的,它使用mod_wsgi 3.X,因爲現在默認允許stdout訪問,因爲用戶更喜歡編寫非可移植的WSGI應用程序。 – 2010-08-02 01:48:09