2009-09-23 23 views
7

Próbuję uruchomić prosty skrypt cgi po skonfigurowaniu mojego serwera.wewnętrzny błąd serwera (500) w prostym skrypcie cgi

Mój skrypt wygląda tak:

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

Kiedy idę do moich skryptów url http://127.0.0.1/~flybywire/cgi-bin/main.py uzyskać:

serwera Wewnętrzny błąd

Serwer napotkał błąd wewnętrzny lub błędną i nie udało się zrealizować Twojej prośby.

I error.log uzyskać następujące:

[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

Inne info:Apache/2.2.8 (Ubuntu) DAV/2 SVN/1.4.6 Server at 127.0.0.1 Port 80

Odpowiedz

21

Możesz potrzebować #!/usr/bin/python na górze skryptu powiedzieć Apache użyć Python wykonaj to. Przynajmniej tak zrobiłem i zadziałało to dla mnie :-).

+0

Dziękuję, to działa. – flybywire

+0

Myślę, że dodać '#!/Usr/bin/python' do wszystkich skryptów cgi jest przerażające. Jak ustawić go przez Apache SetEnv PYTHONPATH? – gonjay

0

Wygląda na to, że Apache ma problem z jego wykonaniem. Zazwyczaj w przypadku skryptu uniksowego należy również określić interpreter u góry skryptu.

warto dodać to do góry:

#!/usr/bin/python 
9

również zapisać plik (jeśli jest to serwer Linux) z zakończeń linii Unix. Zrobiłeś to, wykonując program, używając chmod +x, prawda?

Możesz użyć #!/usr/bin/env python, aby objąć bieżącą, działającą wersję Pythona, jeśli pracujesz w różnych środowiskach (stąd część env).

+0

Kiedy próbowałem bez 'chmod + x' był inny błąd:' (13) Odmowa uprawnień: exec '/home/flybywire/www/cgi-bin/main.py' failed'. –

+1

To tylko dlatego, że chmod + x sprawia, że ​​uprawnienia do plików są wykonywalne - naprawdę konieczne jest, aby plik wykonywalny był niezbędny. –

1

Umieszczenie

#!/usr/bin/env python 

na początku skryptu działa dobrze. I umieścić go na górze, ale Netbeans było wprowadzenie dodatkowego kodu (polecenia import) sam na górze strony, który zawiózł mnie do szału :(

0

Może problem jest to, że nowa wersja Pythona potrzebuje nawiasów().

więc:

print "<body>" 

teraz powinno być:

print ("<body>") 
+0

Używają Python2, a nie Python3. –

0

usunąć 2nd linii w programie (print) próbowałem go na mój serwer apache (mAC os x) działa dobrze. Nie zapomnij chmod 755 i uruchom z sudo apachectl restart To jest dla pytona 2,7

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