L'exécution d'un script Python dans Apache2
Je suis en train d'exécuter un programme en Python à l'aide de Apache. Cependant, Apache ne desservent le fichier et pas réellement l'exécuter. Les autorisations sur le fichier sont r/w/x et c'est dans /var/www
. Je vais poster le contenu de httpd.conf
et le code de programme après. J'ai aussi essayé d'exécuter le script python comme un .cgi
fichier mais cela ne fonctionne pas ainsi. J'ai à la fois le mod_python
et mod_wsgi
modules chargés dans apache.
Python échantillon:
#!/usr/bin/python
# enable debugging
import cgitb
cgitb.enable()
print "Content-Type: text/plain\r\n\r\n"
print
print "Hello World!"
httpd.conf:
AddHandler cgi-script .cgi .pl
AddHandler python-program .py
Je sais que je suis un petit httpd.fichier conf mais quand j'ai installé apache, il n'y a rien dans le fichier. Je devrais aussi mentionner que c'est juste pour que j'apprenne les bases de la gestion de python dans apache. Il n'est pas destiné à la production.
Merci pour l'aide!
Modifier
L'OS que j'utilise est Ubuntu 10.04, et la version d'apache 2. J'ai une version de python 2.6 qui est automatiquement utilisé lors de la #!/usr/bin/env python
est invoquée.
Je reçois deux principales erreurs, la première est que le fichier n'est pas trouvé, même si les autorisations de fichier et de dossier sont de 777. L'erreur dans le fichier journal est
[Sun Feb 05 13:29:44 2012] [error] [client 192.168.1.3] File does not exist: /var/www/poit-0.1
Cette erreur est pour un autre script python que je n'ai pas écrit. Ce qui est bizarre, c'est que le fichier s'affiche dans l'index du dossier à partir d'une fenêtre de navigateur. Cependant, quand je naviguez jusqu'au fichier, j'obtiens l'erreur ci-dessus.
L'autre erreur que je reçois est prématuré de la fin des en-têtes. L'erreur est ci-dessous:
[Sun Feb 05 12:10:19 2012] [error] (8)Exec format error: exec of '/var/www/pyth.py' failed
[Sun Feb 05 12:10:19 2012] [error] [client 192.168.1.3] Premature end of script headers: pyth.py
Je sais qu'ils ne sont pas exécutés dans le fichier, parce que c'est un fichier de config...
Non, ils ne sont pas exécutées dans le même processus; les programmes CGI sont gérées comme un processus distinct.
OriginalL'auteur tpar44 | 2012-02-04
Vous devez vous connecter pour publier un commentaire.
La première ligne de httpd.conf:
AddHandler cgi-script .cgi .pl
est pas pertinent, puisque vous êtes des tests de scripts python et pas des scripts perl. Et vous devez définir ces directives au sein de l'emplacement de votre script python, et indique à apache qu'il doit exécuter des scripts cgi dans cet emplacement:Options +ExecCGI
. Cet extrait serait un début:Addendum 1:
Comme pour mon dernier commentaire, essayez ce script. Il doit cracher des informations sur l'environnement cgi.
Addendum 2:
J'ai reçu votre script fonctionne avec la configuration ci-dessus. Le problème est que le script est écrit en python2. Et le défaut d'interprète apache est en invoquant pour exécuter le script, est python3 (au moins dans mon cas, et les chances sont que ce serait la même chose pour vous aussi).
C'est un python3 version du script hello world:
Addendum 3:
Pour la première erreur, assurez-vous que l'autorisation et la propriété de n'importe quel répertoire et les fichiers que vous tentez de déployer ne sont pas correctement définis. Et essayez d'ajouter ces directives httpd.conf:
Ce qui vous donnera ceci:
Pour la deuxième erreur, à moins que quelque chose m'échappe, il ressemble à apache est en invoquant python 3 interprète pour l'exécution de votre script. Pour écarter cette possibilité, vous pouvez essayer ce qui suit:
Ce sera la liste des interpréteurs python disponible sur votre système. Si vous avez plus d'un interprète, vous obtiendrez quelque chose de similaire à cette sortie:
Si non, il serait cette sortie:
Pour s'en assurer, ce n'est pas le problème que vous rencontrez, essayez avec cette modifiés exemple de script:
Vous aurez remarqué que j'ai mentionné explicitement la version de l'interpréteur apache doit invoquer, ce qui est laid. Mais pour des raisons de test, vous pouvez le faire. Bien sûr, vous devriez carte
#!/usr/bin/python2.6
, quel que soit le binaire que vous avez sur votre serveur, et assurez-vous de ne pas mélanger python 3 comtipable code avec python 2 interprète et vice versa.En fait, je pense que mon extrait de code a fonctionné, mais le problème est maintenant de votre script lui-même. Il semble apache est choquant sur le retour de chariot caractères. Essayez le test plus simple, j'ai juste ajouté mon poste principal.
Par ailleurs, vous ne devez pas activer mod_python et mod_wsgi dans le même temps, ils sont incompatibles. Et chacun d'entre eux exigent une différente configuration de déploiement. Et ce que vous êtes en essayant de faire maintenant, c'est le déploiement d'un python webapp comme un script cgi, n'a besoin ni d'entre eux. Donc, vous pouvez les désactiver afin de réduire le risque d'induire en erreur les interférences.
Si apache ne me permet pas d'exécuter le second script et je ne sais pas pourquoi, car j'ai fait exactement ce que vous avez dit de faire. Le troisième script ne fonctionne pas non plus, mais quand je le lance en ligne de commande ./ je reçois le message d'erreur que
syntax error near unexpected token
impression" avant l'impression de la première page de la déclaration. Si je le lance en l'appelant avec "python", alors qu'il fonctionne parfaitement. Je pense qu'il ya quelque chose de mal avec le shebang, mais je ne suis pas sûr de ce qu'il pourrait être.Sir vous avez sauvé ma journée. Je pense que le "bon de Commande" et de "Permettre à tous les" la partie qui m'a sauvé. Je vous remercie monsieur. S'il vous plaît avoir une belle vie de tous les jours
OriginalL'auteur ylabidi
Re: Le Exec format erreur.
J'ai pour moi-même une couple de fois avant. J'ai eu exactement le même (cryptique) message d'erreur.
J'étais en développement Python (3) des scripts à utiliser par l'intermédiaire de CGI dans Notepad++ sur ma machine Windows, puis de l'uploader sur mon serveur Linux.
Après beaucoup de frustration, j'ai découvert que cette question est liée à des fins de ligne et vous avez besoin de convertir Windows fins de ligne (\r\n) pour UNIX fins de ligne (\n).
Dans Notepad++ (6.1.5), vous pouvez le faire en allant à la Modifier menu et en sélectionnant le conversion EOL option et puis enregistrez le fichier.
Comme alternative, vous pouvez utiliser le dos2unix outil sur la plupart des systèmes Linux. Cet utilitaire de ligne de commande scanne le fichier spécifié et convertit toutes les fins de ligne (et probablement quelques autres trucs aussi, mais les fins de ligne sont importants).
OriginalL'auteur nibbler
**Pour apache2 version 2.4
====commentaire ancienne section et ajoutez le code ci-dessous:
=========================================
Remarque!
referrence
https://www.linux.com/blog/configuring-apache2-run-python-scripts
OriginalL'auteur siczones
Dans mon cas, c'était une question triviale. J'ai dû ajouter cette ligne:
en haut de chaque
.py
fichier, je voulais courir.Puis, tout a commencé à travailler correctement.
OriginalL'auteur Remington Thurber
J'ai eu le même problème et ma config regardais bien par rapport aux réponses ci-dessus.
J'ai trouvé que ma nouvelle installation n'a pas été configuré pour charger mod_cgi.donc
Chargement du module obligatoire ressemble un peu à ça. Si le fait de redémarrer le serveur vous donnera une erreur que le fichier n'a pas été trouvé, la figure de l'endroit où le fichier est modifier le chemin en conséquence.
LoadModule cgi_module modules/mod_cgi.so
OriginalL'auteur Chris
Je suis en supposant que vous utilisez le navigateur firefox. J'ai lu quelque part sur le net qu'il pourrait être lié à firefox addons installés sur une machine.
J'ai été faire cette erreur et j'utilise firefox 20. Passé à l'Opéra et je n'ai pas plus d'erreurs et les scripts python semblait exécuter l'amende juste.
Edit: C'était en fait un eval() appel de la méthode que j'avais négligé qui avait ajouté "(" et ")" les résultats du script que la cause de mon échec. Une fois que je l'ai enlevé, il a travaillé pour moi.
J'ai remarqué que vous ne publiez pas le javascript, html, ou tout ce que vous utilisez pour appeler le script dans la première place. Vous pourriez peut-être poster pour nous? J'ai fait un copier/coller direct exemple à partir d'un site de blog sans regarder ce que j'avais copié. C'était mon erreur.
Il a été un moment depuis que j'ai posté cette réponse. Dans ma question, j'ai été serveur appelant les méthodes côté du client, qui exige la connaissance des noms de méthode de la part du client. Ce n'était pas un projet que j'avais conçu. Dans ce cas, c'est en partie un problème côté client. (C'était une application web, pas un site web, je travaillais sur) l'Opéra est le plus standard compatible quand il s'agit de standards du web, afin d'avoir un Opéra d'installation peuvent aider à résoudre des problèmes, en particulier à base de navigateur.
OriginalL'auteur NuclearPeon