6
votes

Pourquoi le sous-processus jette-t-il Oserror ici?

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  


4 commentaires

Que se passe-t-il si vous exécutez sous-processus avec l'option shell = true 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) même résultat?


HMMM, il en résulte la ligne Summer EnvironmentErmanError ((1, 'SOX non installé correctement'),) 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 doit indiquer ce qui a été capturé dans erreur . 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.


3 Réponses :


1
votes

Essayez en réalité exécutant SOX, car le même utilisateur que votre processus Django WSGI est en cours d'exécution.

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.


1 commentaires

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?



1
votes

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 et fichier fera le tour. C'était ma solution (et cette page est le premier coup pour cette erreur).


1 commentaires

Est-il possible d'un processus de 32 bits pour exécuter () un 64 bits?



1
votes

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.


1 commentaires

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.