我已经编写了自己的模块,主要处理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'),)

这很好。现在我已将ubuntu从8.04更新到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的执行权,但我不知道该在哪里寻找解决方案。子流程执行权可以受到限制吗?有什么提示可能会在这里发生什么吗?

最佳答案

尝试以与django wsgi进程正在运行的用户相同的身份实际执行sox。

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

关于python - 为什么子进程在这里抛出OSError?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5345253/

10-12 18:14