为什么子进程在这里抛出OSError?

时间:2011-03-17 21:07:00

标签: python django ubuntu mod-wsgi

我编写了自己的模块,主要处理django站点的文件字段。搞乱了与mod_wsgi相关的一些事情(通过更新到3.3解决了),我得到了运行的代码。在所有必要的导入之后,在定义任何类或函数之前,我测试sox的可用性,这是我的一些模块函数必不可少的audiocommandlinetool:

sox = 'path/to/sox'
test=subprocess.Popen([sox,'-h'], shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
error=test.communicate()[1]
if error:
    raise EnvironmentError((1,'Sox not installed properly'),)

这很好用。现在我已经从8.04更新了ubuntu到10.04,代码在subprocess.Popen调用行中止,抛出以下错误信息:

File "/usr/lib/python2.6/subprocess.py", line 1139, in _execute_child
    raise child_exception
OSError: [Errno 8] Exec format error  

我已经找到了sox的执行权,我不知道在哪里寻找解决方案。子进程执行权限是否有限?有什么提示可以在这里发生什么?

3 个答案:

答案 0 :(得分:1)

尝试实际执行sox,就像你的django wsgi进程正在运行的用户一样。

该二进制文件可能无法由该用户执行,或者当您从8.04升级到10.04时,您丢失了一些内核标志,允许执行某些二进制类型。

答案 1 :(得分:1)

如果你在Linux上并且得到“OSError:[Errno 8] Exec格式错误” - 检查内核和可执行文件是否属于同一平台 - 32位对64位。 uname -afile <executable path>可以解决问题。这是我的解决方案(此页面是该错误的第一个命中)。

答案 2 :(得分:1)

Apala的暗示解决了这个问题。如果再次发生相同的事情,请务必尝试不同版本的sox。即使sox正在使用命令行,也会导致子进程出现问题。