我编写了自己的模块,主要处理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的执行权,我不知道在哪里寻找解决方案。子进程执行权限是否有限?有什么提示可以在这里发生什么?
答案 0 :(得分:1)
尝试实际执行sox,就像你的django wsgi进程正在运行的用户一样。
该二进制文件可能无法由该用户执行,或者当您从8.04升级到10.04时,您丢失了一些内核标志,允许执行某些二进制类型。
答案 1 :(得分:1)
如果你在Linux上并且得到“OSError:[Errno 8] Exec格式错误” - 检查内核和可执行文件是否属于同一平台 - 32位对64位。 uname -a
和file <executable path>
可以解决问题。这是我的解决方案(此页面是该错误的第一个命中)。
答案 2 :(得分:1)
Apala的暗示解决了这个问题。如果再次发生相同的事情,请务必尝试不同版本的sox。即使sox正在使用命令行,也会导致子进程出现问题。