2

ファイルを解析してディスクに出力を生成し、出力されたファイルにリンクしているWebページを返すPythonスクリプトがあります。HTMLフォームから投稿されたファイルで実行すると、HTML出力が返されず、500エラーページとerror_logに次の行が含まれます。

[Mon Apr 19 15:03:23 2010] [error] [client xxx.xxx.121.79]スクリプトヘッダーの早期終了:uploadcml.py、リファラー:http ://xxx.ch.cam.ac.uk:9000/

ただし、スクリプトが保存する必要のあるファイルは実際にディスクに保存されます。

引数なしで実行すると、スクリプトはファイルが解析されなかったことを示す正しいHTMLを返します。

スクリプトヘッダーの早期終了についてWebで見つけたすべての情報は、ヘッダーがないか、Pythonスクリプトのアクセス許可がないことが原因であると示唆していますが、どちらも私には当てはまりません。

スクリプトの最初の行は次のとおりです。

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

したがって、実行時にヘッダーの出力に失敗する方法はわかりません。解析するファイルなしで実行するとヘッダーを出力しますが、ファイルを指定するとエラーが発生します(ただし、ファイルを解析して出力を保存します)ディスクに!)。

誰かがこれがどのように起こっているのか、そしてそれを修正するために何ができるのか知っていますか?

ファイルのさまざまな場所に間違ってインデントされたジブリッシュ(foobarなど)を追加しようとしましたが、これにより、スクリプトの最後の行であっても、error_logにインデントエラーが追加されます。ただし、時期尚早のスクリプトヘッダーエラーは残ります。これは、スクリプトが最後まで実行されていることを意味しますか?

[編集]なんとか動作させることができました。SWIGを介した外部C++ライブラリへの呼び出しの1つが失敗したようですが、有用なエラーメッセージは生成されませんでした。これで問題が修正され、スクリプトが正しく機能するようになりました。

一部のリモートライブラリ呼び出しが失敗したときに、error_logの唯一のエラーがスクリプトヘッダーに関するものであったことは驚くべきことです。Python以外のコードを呼び出すことの危険性があると思いますか?[/編集]

4

1 に答える 1

1

Cライブラリでセグメンテーション違反が発生したり、不適切な方法で終了したりすると、stdoutバッファがフラッシュされない場合があります。Pythonインタープリターのオプションを使用-uするか、手動でフラッシュすることで、「スクリプトヘッダーの早期終了」を解決できますが、実際の問題には役立ちません。

于 2010-04-19T15:55:29.773 に答える