320 votes

L'exécution de programmes en ligne de commande à partir de l'intérieur de python

Double Possible:
L'appel d'une commande externe en Python

Je 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?

310voto

dF. Points 29787

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.

28voto

S.Lott Points 207588

"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.

3voto

gridzbi Points 698

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.

2voto

z - Points 5610

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.

2voto

Alex Boschmans Points 390

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X