/ / Python CGI Przedwczesny koniec błędu skryptu w zależności od parametrów skryptu - python, cgi, openbabel

Python CGI Przedwczesny koniec błędu skryptu w zależności od parametrów skryptu - python, cgi, openbabel

Mam skrypt Pythona, który powinien parsować pliki produkuje niektóre dane wyjściowe na dysk, a także zwraca stronę internetową łączącą się z wyjściowymi plikami. Po uruchomieniu z plikiem opublikowanym w formularzu HTML nie otrzymuję żadnych danych wyjściowych HTML, tylko strona błędu 500 i error_log zawiera wiersz:

[Pon. 19 kwietnia 15:03:23 2010] [błąd] [klient xxx.xxx.121.79] Przedwczesne zakończenie nagłówków skryptu: uploadcml.py, referer: http://xxx.ch.cam.ac.uk:9000/

Jednak pliki, które powinien zapisywać skrypt, są rzeczywiście zapisywane na dysku.

Jeśli uruchomię go bez żadnych argumentów, skrypt zwróci poprawny kod HTML wskazujący, że żaden plik nie został przeanalizowany.

Wszystkie informacje, które znalazłem w interneciePrzedwczesne zakończenie nagłówków skryptów sugeruje, że jest to spowodowane brakującym nagłówkiem lub brakiem uprawnień do skryptu Pythona, ale żadne z nich nie może dotyczyć mnie.

Pierwsze wiersze skryptu to:

#!/home/nwe23/bin/bin/python
import cgitb; cgitb.enable()
import cgi
import pybel,openbabel
import random
print "Content-Type: text/html"
print

więc po uruchomieniu nie widzę żadnego powodu, aby to się nie udałowypisz nagłówek, a następnie WYSYŁA nagłówek po uruchomieniu bez pliku do przeanalizowania, ale gdy dany plik wygeneruje błąd (ale nadal przetwarza plik i zapisuje dane wyjściowe na dysku!).

Czy ktoś wie, jak to się dzieje i co można zrobić, aby to naprawić?

Próbowałem dodać błędnie wcięty bełkot(np. foobar) w różnych punktach pliku, a to powoduje dodanie błędu wcięcia do error_log, niezależnie od tego, gdzie jest, nawet jeśli jest to ostatnia linia w skrypcie. Błąd przedwczesnych nagłówków skryptów pozostaje jednak. Czy to oznacza, że ​​skrypt wykonuje cały proces?

[EDYTOWAĆ] Udało mi się teraz sprawić, że działaWygląda na to, że jedno z wywołań do zewnętrznej biblioteki C ++ za pośrednictwem SWIG nie działa, ale nie pojawił się użyteczny komunikat o błędzie. Naprawiłem problem z tym, a teraz skrypt działa poprawnie.

Zaskakujące jest to, że jedyny błąd w błędzie error_log dotyczył nagłówków skryptów, gdy niektóre zdalne wywołania biblioteki zakończyły się niepowodzeniem. Przypuszczam, że to jest niebezpieczeństwo wywołania kodu innego niż Python? [/EDYTOWAĆ]

Odpowiedzi:

1 dla odpowiedzi № 1

Gdy biblioteka C dostaje błąd segmentacji lub w inny sposób wychodzi w zły sposób, bufor standardowy może nie zostać przepłukany. Za pomocą -u opcja interpretera Pythona lub jego ręczne opróżnianie powinna rozwiązać "Przedwczesne zakończenie nagłówków skryptu", ale nie pomoże w rozwiązaniu problemu.