18.2.9 CGI スクリプトをデバッグする

何よりもまず、些細なインストール関連のエラーでないか確認してください -- 上の CGI スクリプトのインストールに関する節を注意深く読めば 時間を大いに節約できます。もしインストールの手続きを正しく理解 しているか不安なら、このモジュールのファイル (cgi.py) をコピーして、CGI スクリプトとしてインストールしてみてください。 このファイルはスクリプトとして呼び出すと、スクリプトの実行環境と フォームの内容を HTML フォームに出力します。 正しいモードなどをフォームに与えて、リクエストを送ってみてください。 標準的な cgi-bin ディレクトリにインストールされていれば、 以下のような URL をブラウザに入力してリクエストを送信できるはずです:

http://yourhostname/cgi-bin/cgi.py?name=Joe+Blow&addr=At+Home

もしタイプ 404 のエラーになるなら、サーバはスクリプトを発見 できないでいます - おそらくあなたはスクリプトを別のディレクトリ に入れる必要があるのでしょう。他のエラーになるなら、先に進む前に 解決しなければならないインストール上の問題があります。 もし実行環境の情報とフォーム内容 (この例では、 各フィールドはフィールド名 ``addr'' に対して値 ``At Home''、および フィールド名 ``name'' に対して ``Joe Blow'' ) が綺麗にフォーマット されて表示されるなら、 cgi.py スクリプトは正しくインストールされています。 同じ操作をあなたの自作スクリプトに対して行えば、スクリプトをデバッグ できるようになるはずです。

次のステップでは cgi モジュールの test() 関数を 呼び出すことになります: メインプログラムコードを以下の 1 行、

cgi.test()

と置き換えてください。この操作で cgi.py ファイル自体を インストールした時と同じ結果を出力するはずです。

通常の Python スクリプトが例外を処理しきれずに送出した場合 (様々な理由: モジュール名のタイプミス、ファイルが開けなかった、など)、 Python インタプリタはナイスなトレースバックを出力して終了します。 Python インタプリタはあなたの CGI スクリプトが例外を送出した場合 にも同様に振舞うので、トレースバックは大抵HTTP サーバのいずれかの ログファイルに残るかまったく無視されるかです。

幸運なことに、あなたが自作のスクリプトで 何らかの コードを 実行できるようになったら、cgitb モジュールを使って 簡単にトレースバックをブラウザに送信できます。まだそうでないなら、 以下の一行:

import cgitb; cgitb.enable()

をスクリプトの先頭に追加してください。そしてスクリプトを再度 走らせます; 問題が発生すれば、クラッシュの原因を見出せるような 詳細な報告を読めます。

cgitb モジュールのインポートに問題がありそうだと 思うなら、(組み込みモジュールだけを使った) もっと堅牢なアプローチを 取れます:

import sys
sys.stderr = sys.stdout
print "Content-Type: text/plain"
print
...your code here...

このコードは Python インタプリタがトレースバックを出力することに 依存しています。出力のコンテント型はプレーンテキストに設定されて おり、全ての HTML 処理を無効にしています。スクリプトがうまく動作 する場合、生の HTML コードがクライアントに表示されます。スクリプト が例外を送出する場合、最初の 2 行が出力された後、トレースバックが 表示されます。HTML の解釈は行われないので、トレースバックを 読めるはずです。

ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。