파일을 구문 분석하고 출력물을 디스크로 생성하고 출력 된 파일에 링크 된 웹 페이지를 반환하는 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의 유일한 오류는 스크립트 헤더에 관한 것이 었습니다. 파이썬 코드가 아닌 코드를 호출하는 것이 위험하다고 생각합니까?
질문을 다시 포맷 해보십시오. 또한 응용 프로그램에 일부 로깅 (파일, syslog 등)을 추가해보십시오. 'logging' 모듈을 사용할 수 있습니다. –
맞아요. 파이어 스크립트의 출력을 로거로 사용하는 데 익숙해졌습니다. 아무 것도 없으면 쓸모가 없습니다. 로깅 모듈을 사용하면 문제가 일부 예외를 throw해야하는 외부 라이브러리에 대한 호출 인 것으로 나타납니다. 왜이 지점에서 스크립트가 생성 한 HTML이 출력되지 않는 것입니까? – Nick
콘텐츠 길이를 만드시겠습니까? 그것은 또한 데이터를 전송할 때 필요할 것으로 보인다. – extraneon