Popen不再使用apache / wsgi和python 2.7.2了吗?

时间:2011-11-29 10:46:28

标签: python apache mod-wsgi

我的django应用程序曾经使用python subprocess.Popen制作一些shell命令,因为我升级到ubuntu到11.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版本,相同的apache配置文件,相同的环境变量,但是使用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使用python 2.7了吗?

1 个答案:

答案 0 :(得分:16)

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

http://bugs.python.org/issue13156

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

WSGIApplicationGroup %{GLOBAL}