programa otro linea interprete ejecutar desde cómo consola compilar comandos archivo python command-line

otro - Ejecutando programas de línea de comandos desde python



ejecutar.py desde consola python (5)

Posible duplicado:
Llamando un comando externo en Python

Estoy creando una aplicación web que va a manipular (rellenar, mezclar, combinar, etc.) archivos de sonido y he descubierto que sox hace exactamente lo que quiero. Sox es un programa de línea de comandos de Linux y me siento un poco incómodo con el hecho de que la aplicación web de Python inicie nuevos procesos de sox en mi servidor por solicitud.

Ejemplo:

import os os.system(''sox input.wav -b 24 output.aiff rate -v -L -b 90 48k'')

Toda esta configuración me parece un poco inestable.

Entonces, mi pregunta es, ¿cuál es la mejor práctica para ejecutar programas de línea de comandos desde una aplicación web de Python (o cualquier lenguaje de scripting)?

Las colas de mensajes serían una cosa a implementar para sortear todo el ciclo de respuesta de solicitud. ¿Pero hay otras maneras de hacer estas cosas más elegantes?


Me siento un poco incómodo con el hecho de que la aplicación web python inicie nuevos procesos de sox en mi servidor por solicitud.

Para mí, esto parece significar que teme que, si abre su servidor web al público, no hay mucho que pueda hacer para evitar que sus recursos de servidor se consuman si 15.000 personas deciden hacer clic en ese botón que lanzará sox De este modo.


"Toda esta configuración me parece un poco inestable".

Hable con la gente de ffmpegx acerca de tener una interfaz gráfica de usuario sobre un sistema de línea de comandos. No parece molestarles.

De hecho, afirmo que un front-end GUI (o web) sobre un backend de línea de comando es en realidad más estable, ya que tiene una interfaz muy, muy limpia entre GUI y comando. El comando puede evolucionar a un ritmo diferente del de la web, siempre que las opciones de la línea de comandos sean compatibles, no hay posibilidad de rotura.


El módulo de subprocess es la forma preferida de ejecutar otros programas de Python, mucho más flexible y os.system de usar que os.system .

import subprocess #subprocess.check_output([''ls'',''-l'']) #all that is technically needed... print subprocess.check_output([''ls'',''-l''])


No estoy familiarizado con sox, pero en lugar de hacer llamadas repetidas al programa como una línea de comando, ¿es posible configurarlo como un servicio y conectarme para las solicitudes? Puedes echar un vistazo a la interfaz de conexión como sqlite para inspirarte.


Si le preocupa el rendimiento del servidor, considere limitar el número de procesos sox en ejecución. Si se ha alcanzado el límite, siempre puede guardar en caché la solicitud e informar al usuario cuando haya terminado de la forma que mejor se adapte a su aplicación.

Como alternativa, tenga los n scripts de trabajo en otras máquinas que extraigan solicitudes de la base de datos y llamen a sox, y luego empuje el archivo de salida resultante hacia donde debe estar.