enable - Ejecutando un script de Python en Apache2
python on server (6)
Estoy tratando de ejecutar un programa de Python usando Apache. Sin embargo, Apache solo servirá el archivo y no lo ejecutará. Los permisos en el archivo son r / w / x y está en /var/www
. Voy a publicar los contenidos de httpd.conf
y el código del programa después. También traté de ejecutar el script de python como un archivo .cgi
, pero eso no funcionó tan bien. También tengo los módulos mod_python
y mod_wsgi
cargados en apache.
Muestra de Python:
#!/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
Sé que es un pequeño archivo httpd.conf, pero cuando instalé Apache, no había nada en el archivo. También debo mencionar que esto es solo para aprender los conceptos básicos de ejecutar python en apache. No es para producción. ¡Gracias por la ayuda!
Editar
El sistema operativo que estoy usando es Ubuntu 10.04 y la versión de apache es 2. Tengo la versión 2.6 de Python que se usa automáticamente cuando se invoca #!/usr/bin/env python
.
Recibo dos errores principales, el primero es que el archivo no se encuentra aunque los permisos del archivo y la carpeta son 777. El error del registro es
[Sun Feb 05 13:29:44 2012] [error] [client 192.168.1.3] File does not exist: /var/www/poit-0.1
Este error es para una secuencia de comandos python diferente que no escribí. Lo que es extraño es que el archivo aparece en el índice de la carpeta cuando se accede desde una ventana del navegador. Sin embargo, cuando navego hasta el archivo, aparece el error anterior.
El otro error que estoy recibiendo es el final prematuro de los encabezados. El error es a continuación:
[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
Supongo que estás usando Firefox. Leí en otra parte de la red que podría estar relacionado con los complementos de Firefox instalados en una máquina.
Recibí este error y uso Firefox 20. Cambié a Opera y no obtuve más errores y las secuencias de comandos de Python parecían funcionar bien.
Editar: En realidad, era una llamada al método eval () que había pasado por alto y que había agregado "(" y ")" a los resultados del script que causó mi falla. Una vez que los quité, funcionó para mí.
Noté que no publicaste el javascript, html o lo que sea que usas para llamar al script en primer lugar. ¿Quizás podrías publicarlo para nosotros? Hice un ejemplo directo de copiar / pegar desde un blog sin mirar lo que había copiado. Ese fue mi error
Re: El error de formato Exec .
Me he topado con esto yo mismo un par de veces antes. Tuve el mismo mensaje de error (críptico).
Estaba desarrollando scripts de Python (3) para usarlos a través de CGI en Notepad ++ en mi máquina con Windows, y luego los cargué a mi servidor Linux.
Después de mucha frustración, descubrí que este problema está relacionado con los finales de línea y necesita convertir los finales de línea de Windows (/ r / n) en terminaciones de línea UNIX (/ n) .
En Notepad ++ (6.1.5), puede lograrlo yendo al menú Editar y seleccionando la opción de conversión EOL y luego guardando el archivo.
La primera línea de httpd.conf: AddHandler cgi-script .cgi .pl
es irrelevante, ya que está probando scripts de Python y no de Perl. Y debe definir esas directivas dentro de la ubicación de su secuencia de comandos python, y decirle a apache que debe ejecutar scripts cgi en esa ubicación: Options +ExecCGI
. Este fragmento sería un comienzo:
<Directory /path/to/sample.py />
Options +ExecCGI
AddHandler cgi-script .py
</Directory>
Addendum 1 :
Según mi último comentario, prueba este script. Debe escupir información sobre el entorno cgi.
#!/usr/bin/python
import cgi
cgi.test()
Addendum 2 :
Tengo su script para trabajar con la configuración anterior. El problema es que el script está escrito en python2. Y el intérprete predeterminado que apache invoca para ejecutar el guión, es python3 (al menos en mi caso, y es probable que esto también sea lo mismo para usted).
Esta es una versión python3 del script hello world:
#!/usr/bin/env python
# enable debugging
import cgitb
cgitb.enable()
print("Content-Type: text/plain;charset=utf-8")
print()
print("Hello World!")
Addendum 3 :
Para el primer error, asegúrese de que el permiso y la propiedad del directorio y los archivos que intenta implementar estén configurados correctamente. Y intente agregar esas directivas a httpd.conf:
Order allow,deny
Allow from all
Que te conseguirá esto:
<Directory /path/to/sample.py />
Options +ExecCGI
AddHandler cgi-script .py
Order allow,deny
Allow from all
</Directory>
Para el segundo error, a menos que me falta algo, parece que apache está invocando el intérprete de python 3 para ejecutar el script. Para descartar esta posibilidad, puede intentar lo siguiente:
ls -al /usr/bin/python*
Esto mostrará una lista de los intérpretes de Python disponibles en su sistema. Si tiene más de un intérprete obtendrá algo similar a este resultado:
/usr/bin/python -> python3*
/usr/bin/python2.6*
/usr/bin/python3*
Si no, sería este resultado:
/usr/bin/python -> python2.6*
/usr/bin/python2.6*
Para asegurarte de que este no es el problema que tienes, prueba con este script de muestra modificado:
#!/usr/bin/python2.6
# enable debugging
import cgitb
cgitb.enable()
print "Content-Type: text/plain/r/n/r/n"
print
print "Hello World!"
Notarás que mencioné explícitamente la versión del intérprete que apache debe invocar, lo cual es feo. Pero por el bien de las pruebas, puedes hacerlo. Por supuesto, debe asignar #!/usr/bin/python2.6
al binario que tenga en su servidor, y asegúrese de no mezclar el código compatible con Python 3 con el intérprete de python 2 y viceversa.
** Para apache2 versión 2.4
sudo apt-get install python
sudo apt-get install apache2
editar archivo /etc/apache2/conf-enables/serve-cgi-bin.conf
==== comentar la sección anterior y agregar el código a continuación:
ScriptAlias /cgi-bin/ /var/www/cgi-bin/
<Directory "/var/www/cgi-bin">
AddHandler cgi-script .py
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
=========================================
edite el archivo /etc/apache2/apache2.conf *** agregue el siguiente código:
<Directory "/var/www/cgi-bin">
AllowOverride None
Options ExecCGI
Order allow,deny
Allow from all
</Directory>
<Directory "/var/www/cgi-bin">
Options All
</Directory>
<Directory /usr/local/apache2/cgi-bin>
Require all granted
</Directory>
¡Nota!
use for apache2.4
file python keep in directory: /var/www/cgi-bin/
You can test :go to http://localhost/cgi-bin/<namefile>.py
referencia https://www.linux.com/blog/configuring-apache2-run-python-scripts
En mi caso, fue un tema trivial. Tuve que agregar esta línea:
#!/usr/bin/python3
a la cima de cada archivo .py
que quería ejecutar.
Entonces, todo comenzó a funcionar correctamente.
Tuve el mismo síntoma y mi configuración se veía bien en comparación con las respuestas anteriores.
Descubrí que mi nueva instalación no estaba configurada para cargar mod_cgi.so
Cargando el módulo requerido se ve un poco así. Si reiniciar el servidor le dará un error de que no se encontró el archivo, determine dónde está el archivo y ajuste la ruta en consecuencia.
LoadModule cgi_module modules/mod_cgi.so