2009-09-23 13 views
7

Estoy tratando de ejecutar un script cgi simple después de configurar mi servidor.error interno del servidor (500) en script cgi simple

Mi script se parece a esto:

print "Content-type: text/html" 
print 
print "<html><head><title>CGI</title></head>" 
print "<body>" 
print "hello cgi" 
print "</body>" 
print "</html>" 

Cuando voy a mi guiones url http://127.0.0.1/~flybywire/cgi-bin/main.py me sale:

error interno del servidor

El servidor encontró un error interno o mala y no pudo completar su solicitud.

Y en error.log consigo el siguiente:

[error] (8)Exec format error: exec of '/home/flybywire/www/cgi-bin/main.py' failed [error] [client 127.0.0.1] Premature end of script headers: main.py

otra información:Apache/2.2.8 (Ubuntu) DAV/2 SVN/1.4.6 Server at 127.0.0.1 Port 80

Respuesta

21

Es posible que necesite un #!/usr/bin/python en la parte superior de la secuencia de comandos para indicarle a Apache a usar Python para ejecutalo. Al menos, lo hice y funcionó para mí :-).

+0

gracias, funciona. – flybywire

+0

Creo que agregar '#!/Usr/bin/python' a todo el script cgi es aterrador. Cómo configurarlo por apache SetEnv PYTHONPATH? – gonjay

0

Parece que Apache tiene problemas para ejecutarlo. Por lo general, para un script de Unix también necesita especificar el intérprete en la parte superior del script.

Trate de añadir esto a la parte superior:

#!/usr/bin/python 
9

Además, guarda el archivo (si se trata de un servidor Linux) con los finales de línea Unix. Lo hiciste ejecutable usando chmod +x ¿no?

Puede usar #!/usr/bin/env python para cubrir la versión corriente de Python si está ejecutando en varios entornos (de ahí la parte env).

+0

Cuando lo probé sin 'chmod + x' había un error diferente:' (13) Permiso denegado: el ejecutor de '/home/flybywire/www/cgi-bin/main.py' falló'. –

+1

Eso es simplemente porque chmod + x hace que los permisos de los archivos sean ejecutables, hacer que el archivo sea ejecutable es un requisito previo, en realidad. –

1

Poner

#!/usr/bin/env python 

en la parte superior de la secuencia de comandos funciona bien. Lo puse en la parte superior, pero Netbeans estaba poniendo código adicional (comandos de importación) por sí mismo en la parte superior de la página que me volvió loca :(

0

Tal vez su problema es que la nueva versión de Python necesita paréntesis().

por lo que su

:

print "<body>" 

Ahora debería ser:

print ("<body>") 
+0

Están usando Python2 no Python3. –

0

quitar la segunda línea en su programa (impresión) lo probé en mi servidor Apache (mac os x) funciona bien. no se olvide de chmod 755 y reiniciar el sistema con sudo apachectl reiniciar Esto es para pitón 2,7

print "Content-type: text/html" 
print "<html><head><title>CGI</title></head>" 
print "<body>" 
print "hello cgi" 
print "</body>" 
print "</html>" 
Cuestiones relacionadas