2010-07-20 16 views
1

Je suis désolé si c'est une question en double, mais après avoir recherché 3 sous-rubriques pour "sous-processus django", je n'ai pas trouvé la réponse à mon problème particulier.Problème de sous-processus étrange avec Django

J'essaye d'exécuter pdflatex sur le fichier tex, mais pour une raison quelconque dans Django cela ne produit rien. Cela fonctionne très bien dans un script python régulier, cependant. J'ai omis la plupart du code ici, mais c'est fondamentalement le bit important. Je cours ceci sur apache2 avec mod_wsgi, et je suspecte que ce pourrait être un problème lié aux permissions d'apache, pas du tout. Merci d'avance.

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: La solution de ce problème est assez facile. Je veux juste l'ajouter ici, donc tout le monde qui a des problèmes avec ça, peut le trouver. Fondamentalement, cela implique d'exécuter le site en tant qu'utilisateur différent plutôt que www-data en utilisant la directive de configuration WSGIDaemonProcess. Voici une configuration minimale:

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

En outre, il serait souhaitable d'ajouter WSGIRestrictStdout Off à votre httpd.conf, parce que, pour autant que je comprends, mod_wsgi ignore tout processus qui tente d'utiliser stdout. Merci, Graham.

+1

Quel système d'exploitation utilisez-vous? SE Linux activé? –

+0

Ubuntu 10.04 LTS, donc SELinux n'est pas installé par défaut. –

+1

WSGIRestrictStdout n'est pas nécessaire si vous utilisez mod_wsgi 3.X par défaut pour autoriser l'accès stdout car les utilisateurs préfèrent écrire des applications WSGI non portables. –

Répondre

1

Spécifie le chemin absolu de 'pdflatex' dans la commande. L'utilisateur Apache PATH peut ne pas regarder dans les mêmes répertoires que votre compte personnel. En outre, Apache s'exécute comme un utilisateur spécial qui n'aura pas accès en écriture là où vous le pouvez. Suggérez que vous utilisiez le mode démon mod_wsgi et spécifiez que ce processus démon s'exécute comme vous et non l'utilisateur Apache. Lisez la documentation sur le site mod_wsgi pour savoir comment faire.

+0

merci, je vais lire à ce sujet, mais laissera cette question ouverte jusqu'à ce que j'ai résolu le problème. –