Double Possible:
L'appel d'une commande externe en PythonJe suis en train de construire une application web qui va manipuler (tampon, de mélange, de fusion, etc), les fichiers son et j'ai trouvé que le sox est exactement ce que je veux. Sox est un linux en ligne de commande programme, que je me sens un peu mal à l'aise avec le fait d'avoir l'application web en python de départ de nouvelles sox processus sur mon serveur par demande.
Exemple:
import os os.system('sox input.wav -b 24 output.aiff rate -v -L -b 90 48k')
Cette installation semble un peu instable pour moi.
Donc ma question est, quelle est la meilleure pratique pour l'exécution de programmes en ligne de commande depuis un python (ou tout autre langage de script) web app?
Files d'attente de messages, serait une chose à mettre en œuvre afin de faire le tour de la réponse à la requête de cycle. Mais est-il d'autres moyens de rendre ces choses plus élégant?
Réponses
Trop de publicités?L' subprocess
module est le moyen préféré de l'exécution d'autres programmes de Python-beaucoup plus souple et plus agréable à utiliser que os.system
.
"Toute cette installation semble un peu instable pour moi."
Parlez-en à la sortie de ffmpegx les gens sur le fait d'avoir une interface graphique front-end sur une ligne de commande principal. Il ne semble pas les déranger.
En effet, je soutiens que d'une interface graphique (ou web) front-end sur une ligne de commande backend est en fait plus stable, puisque vous avez un très, très propre interface entre l'interface graphique et de commande. La commande peut évoluer à un rythme différent à partir du web, aussi longtemps que les options de ligne de commande sont compatibles, vous n'avez pas la possibilité de la rupture.
Si vous êtes préoccupé par les performances du serveur puis regardez à la limitation du nombre de course de sox processus. Si la pac a été touché, vous pouvez toujours le cache de la demande et d'informer l'utilisateur quand il est terminé, quelle que soit la manière qui convient à votre application.
Sinon, le n travailleur scripts sur d'autres machines qui tirent les demandes de la db et appel sox, puis appuyez sur le fichier de sortie à l'endroit où il doit être.
Je ne suis pas familier avec sox, mais au lieu de faire des appels répétés pour que le programme en ligne de commande, est-il possible de le configurer en tant que service et de vous y connecter pour les demandes? Vous pouvez prendre un coup d'oeil à l'interface de connexion tels que sqlite pour l'inspiration.
Je me sens un peu mal à l'aise avec l'application web en python le démarrage de nouveaux sox processus sur mon serveur sur demande.
Pour moi, cela semble signifier qu'il a peur que, s'il ouvre son serveur web pour le public, qu'il n'y a pas beaucoup de choses qu'il peut faire pour l'empêcher de ressources du serveur de consommer si 15.000 personnes décidez de cliquer sur le bouton qui lancera sox de cette façon.