2010-04-19 5 views
2

파일을 구문 분석하고 출력물을 디스크로 생성하고 출력 된 파일에 링크 된 웹 페이지를 반환하는 Python 스크립트가 있습니다. HTML 폼에서 게시 된 파일을 실행하면 HTML 출력이 다시 나오지 않고 500 오류 페이지 만 표시되고 error_log에는 다음 행이 포함됩니다.Python CGI 스크립트 매개 변수에 따라 스크립트 오류가 조기에 끝납니다.

[월 Apr 19 15:03:23 2010] [오류] [클라이언트 xxx .xxx.121.79] 스크립트 헤더가 너무 빨리 끝납니다. uploadcml.py, referer : http://xxx.ch.cam.ac.uk:9000/

그러나 스크립트가 저장해야하는 파일은 실제로 디스크에 저장됩니다.

인수없이 실행하면 스크립트는 구문 분석 된 파일이 없다는 것을 나타내는 올바른 HTML을 반환합니다.

스크립트 헤더의 미숙 한 부분에 대한 웹에서 발견 된 모든 정보는 헤더가 누락되었거나 파이썬 스크립트에 대한 사용 권한이 없기 때문에 나에게도 적용될 수 없다는 것을 의미합니다. 이 출력 헤더에 실패하는

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

그렇게 실행시, 나는 방법을 볼 수 있으며, 구문 분석 할 파일없이 실행할 때 출력을 헤더을 수행

스크립트의 첫 번째 라인

은 하지만 주어진 파일은 오류를 생성합니다 (그러나 여전히 파일을 구문 분석하고 결과를 디스크에 저장합니다!).

어떻게 이런 일이 일어나고 있으며이를 해결하기 위해 무엇을 할 수 있는지 알고 있습니까?

파일의 여러 지점에서 잘못 삽입 된 횡설수설 (예 : foobar)을 추가하려고 시도했는데,이 경우 스크립트의 맨 마지막 줄인 경우에도 오류 위치에 오류가 추가됩니다. 그러나 조기 스크립트 헤더 오류가 남아 있습니다. 이것은 스크립트가 완전히 실행되고 있음을 의미합니까?

[편집] SWIG를 통해 외부 C++ 라이브러리에 대한 호출 중 하나가 실패했지만 유용한 오류 메시지가 표시되지 않는 것 같습니다. 나는 그 문제를 해결했고, 이제 스크립트가 올바르게 작동하고있다.

일부 원격 라이브러리 호출이 실패했을 때 error_log의 유일한 오류는 스크립트 헤더에 관한 것이 었습니다. 파이썬 코드가 아닌 코드를 호출하는 것이 위험하다고 생각합니까?

+0

질문을 다시 포맷 해보십시오. 또한 응용 프로그램에 일부 로깅 (파일, syslog 등)을 추가해보십시오. 'logging' 모듈을 사용할 수 있습니다. –

+0

맞아요. 파이어 스크립트의 출력을 로거로 사용하는 데 익숙해졌습니다. 아무 것도 없으면 쓸모가 없습니다. 로깅 모듈을 사용하면 문제가 일부 예외를 throw해야하는 외부 라이브러리에 대한 호출 인 것으로 나타납니다. 왜이 지점에서 스크립트가 생성 한 HTML이 출력되지 않는 것입니까? – Nick

+0

콘텐츠 길이를 만드시겠습니까? 그것은 또한 데이터를 전송할 때 필요할 것으로 보인다. – extraneon

답변

1

C 라이브러리가 세그먼테이션 오류를 발생 시키거나 그렇지 않으면 잘못된 방법으로 종료 할 때 stdout 버퍼가 플러시되지 않을 수 있습니다. -u 옵션을 사용하여 Python 인터프리터를 사용하거나 수동으로 플러시하면 "스크립트 헤더의 조기 종료"가 해결되지만 실제 문제는 도움이되지 않습니다.

관련 문제