【发布时间】:2011-03-06 21:09:42
【问题描述】:
我有一个使用命令行音频工具 sox 的自定义 django 文件字段。只要我使用 django 开发服务器,它就可以很好地工作。但是,一旦我切换到生产服务器,使用 apache2 和 mod_wsgi,mod_wsgi 就会将每个输出捕获到标准输出。这使得无法使用命令行工具来评估文件,例如使用它来检查上传的文件是否真的是这样的音频文件:
filetype=subprocess.Popen([sox,'--i','-t','%s'%self.path], shell=False,\
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
(filetype,error)=filetype.communicate()
if error:
raise EnvironmentError((1,'AudioFile error while determining audioformat: %s'%error))
有没有办法解决这个问题?
编辑
我得到的错误是“缺少文件名”。我正在使用 mod_wsgi 2.5,标准的 ubuntu 8.04。
edit2
当我从 mod_wsgi 的 django 中调用 subprocess.Popen 时,究竟会发生什么?子进程 stdin/stdout 不应该独立于 django stdin/stdout 吗?在这种情况下,mod_wsgi 不应影响通过子进程调用的程序。是否可以使用类似 mod_wsgi 的命令行工具?
【问题讨论】:
-
发布您遇到的实际错误的详细信息?你在使用 mod_wsgi 3.X 吗?
-
我遇到了类似的问题,最后只是将文件写入服务器上的 ram 驱动器 (/dev/shm),然后在转换后将其删除。如果您找到解决此问题的更好方法,请告诉我。
-
不,我刚刚更新到 wsgi 3.x。据我所知,这解决了问题并使上面的代码正常工作。