J'ai écrit mon propre module, principalement gérant un champ de fichier pour un site Django. Après avoir gâché certaines choses liées à mod_wsgi (résolue par la mise à jour de 3,3), j'ai eu mon code à exécuter. Juste après toutes les importations nécessaires, avant de définir des classes ou des fonctions, je teste la disponibilité de SOX, un audiocommandlinettool essentiel à certains de mes modules Fonctions:
File "/usr/lib/python2.6/subprocess.py", line 1139, in _execute_child raise child_exception OSError: [Errno 8] Exec format error
3 Réponses :
Essayez en réalité exécutant SOX, car le même utilisateur que votre processus Django WSGI est en cours d'exécution. P>
Il est possible que le binaire ne soit pas exécutable par cet utilisateur, ou que lorsque vous mis à niveau de 8,04 à 10,04, vous avez perdu un drapeau du noyau permettant d'exécuter certains types binaires. P>
Connecté en tant que www-Data, comme spécifié dans la configuration du site pour le démon WSGI. Exécuter SOX de la ligne de commande a bien fonctionné. Est-ce ce que vous soupçonnez?
Si vous êtes sur Linux et que vous obtenez "OsError: [Errno 8] EXEC FORMAT ERREUR" - Vérifiez si le noyau et l'exécutable sont pour la même plate-forme - 32bits VS 64bit. Uname -a code> et
fichier
Est-il possible d'un processus de 32 bits pour exécuter () un 64 bits?
Le soupçon d'Apala a résolu le problème. Assurez-vous d'essayer différentes versions de SOX, si la même chose se produit à nouveau. Même si SOX travaille sur la ligne de commande, cela peut causer des problèmes avec les sous-processus. P>
J'ai couru dans ce Q / A avec un problème similaire aujourd'hui. Le "shell = vrai" travaillé pour moi. Il fallait faire avec mon LD_Library_Path et l'exécutable tente de lier un différend différent que prévu. J'ajoute le commentaire ici dans l'espoir que cela aide quelqu'un d'autre.
Que se passe-t-il si vous exécutez sous-processus avec l'option
shell = true code> et exécutez l'application comme vous le feriez normalement dans la console, comme par exemple,
test = sous-processus.popen ("/ chemin / chemin / sox -h ", shell = true, stdout = subprocess.pipe, stardr = subprocess.pipe) code> même résultat?
HMMM, il en résulte la ligne
Summer EnvironmentErmanError ((1, 'SOX non installé correctement'),) Code> Etre exécuté et l'environnementError est soulevé. Cela se produit avec le développement et Apache / mod_wsgi. SOX peut être démarré à partir de la ligne de commande sans aucun problème, je ne peux donc pas imaginer que j'ai perdu un drapeau du noyau, comme suggère Samurailwngnome. Et cela ne peut également pas être des privilèges utilisateur, j'ai démarré Sox comme utilisateur normal, SU et www-Data ...
L'instruction code> code> doit indiquer ce qui a été capturé dans
erreur code>. C'est peut-être un message d'erreur SOX légitime.
@APALALA: Bon indice, qui a résolu le problème. Était définitivement un problème avec la version de SOX étant installée. Je ne peux pas dire exactement pourquoi cela a fonctionné dans la ligne de commande et non dans Subprocess, mais cela fonctionne maintenant.