2010-07-20 7 views
1

중복 질문이지만 3 페이지의 "django subprocess"를 검색 한 후 미안하지만 문제가 해결되지 않았습니다.Django의 이상한 하위 프로세스 문제

pdflatex 파일에 tex 파일을 실행하려고하는데 어떤 이유로 장고에서 아무것도 생성하지 않습니다. 그것은 일반 파이썬 스크립트에서 잘 작동합니다. 여기서 대부분의 코드를 생략했지만, 이는 기본적으로 중요한 비트입니다. 나는 mod_wsgi와 함께 apache2에서 이것을 실행하고 있는데 아파치 사용 권한 관련 문제일지도 모른다고 생각합니다. 미리 감사드립니다.

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- 데이터가 아닌 다른 사용자로 사이트를 실행해야합니다. 지금까지 내가 이해, mod_wsgi에이 표준 출력을 사용하려고 어떤 과정을 무시하기 때문에, 또한

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

, 당신을 httpd.conf에 WSGIRestrictStdout Off를 추가하는 것이 좋습니다 것 : 여기에 최소한의 구성입니다. 고마워, 그레이엄.

+1

어떤 OS를 사용합니까? SE Linux를 사용할 수 있습니까? –

+0

Ubuntu 10.04 LTS이므로 SELinux는 기본적으로 설치되지 않습니다. –

+1

WSGIRestrictStdout은 필요하지 않습니다. mod_wsgi 3.X를 기본값으로 사용하므로 사용자가 이식성이없는 WSGI 응용 프로그램을 선호하기 때문에 stdout 액세스를 허용합니다. –

답변

1

명령에서 'pdflatex'의 절대 경로를 지정하십시오. Apache 사용자 PATH는 개인 계정과 동일한 디렉토리에서 보지 않을 수 있습니다. 또한 아파치는 가능한 한 쓰기 권한이없는 특별한 사용자로 실행됩니다. mod_wsgi 데몬 모드를 사용하고 그 데몬 프로세스가 Apache 사용자가 아닌 사용자로서 실행되도록 지정하십시오. mod_wsgi 사이트의 문서를 읽으십시오.

+0

감사합니다. 문제를 해결할 때까지이 질문을 열어 두겠습니다. –