Executing command line programs from within python
Possible Duplicate:
Calling an external command in Python
我正在构建一个Web应用程序,它将处理(pad、mix、merge等)声音文件,我发现sox正是我想要的。SOX是一个Linux命令行程序,我对让PythonWeb应用在我的服务器上按请求启动新的SOX进程感到有点不舒服。
例子:
1 2 | import os os.system('sox input.wav -b 24 output.aiff rate -v -L -b 90 48k') |
整个设置对我来说有点不稳定。
所以我的问题是,在Python(或任何脚本语言)Web应用程序中运行命令行程序的最佳实践是什么?
为了绕过整个请求响应周期,需要实现消息队列。但是有没有其他方法让这些东西更优雅呢?
1 2 3 | import subprocess #subprocess.check_output(['ls','-l']) #all that is technically needed... print subprocess.check_output(['ls','-l']) |
"整个设置对我来说有点不稳定。"
与ffmpegx的同事讨论通过命令行后端使用GUI前端的问题。他们似乎不介意。
实际上,我认为通过命令行后端的GUI(或Web)前端实际上更稳定,因为在GUI和命令之间有一个非常非常干净的接口。该命令可以以与Web不同的速度发展,只要命令行选项兼容,就不会出现中断。
如果您关心服务器性能,那么可以考虑限制运行SOX进程的数量。如果达到了上限,您可以缓存请求,并在请求完成时通知用户,无论哪种方式适合您的应用程序。
或者,让其他机器上的n个工作者脚本从数据库中提取请求并调用SOX,然后将生成的输出文件推送到需要的地方。
I'm feeling a little uncomfortable
with having the python web app
starting new sox processes on my
server on a per request basis.
对我来说,这似乎意味着他担心,如果他向公众开放自己的Web服务器,那么如果15000人决定单击这个按钮,以这种方式启动SOX,那么他就没有很多办法阻止服务器资源被消耗。
我对SOX不熟悉,但是我不是以命令行的形式重复调用程序,而是可以将它设置为服务,并在请求时连接到它吗?您可以查看连接接口(如sqlite)以获取灵感。