Popen不工作了与Apache / Wsgi和Python 2.7.2?

我的django应用程序,用于通过使用python subprocess.Popen做一些shell命令不工作了,因为我升级到Ubuntu 10.10

为了简化问题,我把错误的代码放到了wsgi脚本中:

import os import sys from subprocess import Popen,PIPE p=Popen(['/usr/bin/id'],stdout=PIPE,stderr=PIPE) comm=p.communicate() print comm,p.returncode os.environ['DJANGO_SETTINGS_MODULE'] = 'settings' import django.core.handlers.wsgi application = django.core.handlers.wsgi.WSGIHandler() 

如果我直接通过python运行这个代码,它的工作原理:

 $ python -V Python 2.7.2+ $ python django_wsgi.py ('uid=1002(www) gid=1002(www) groups=1002(www)\n', '') 0 

如果我运行这个代码的Apache(我只是把相关的URL到浏览器),在Apache日志中,我得到:

 [Tue Nov 29 11:34:38 2011] [error] ('', '') -6 

什么是这个错误“-6”?

问题是用我的开发服务器(Ubuntu 10.04,几乎相同的apache / wsgi版本,相同的apacheconfiguration文件,相同的环境variables,但与python 2.6.5),它运作良好:

 [Tue Nov 29 11:29:10 2011] [error] ('uid=1000(www) gid=1000(www) groups=1000(www)\\n', '') 0 

你知道为什么Popen不能通过Apache 2.7的Python工作吗?

因为最新的Python 2.7有一个错误,导致在子解释器中运行fork失败。

http://bugs.python.org/issue13156

假设只托管一个WSGI应用程序,通过添加到Apache配置中,强制使用主解释器而不是子解释器:

 WSGIApplicationGroup %{GLOBAL}