Tuesday, December 10, 2013

CGIHTTPServerでのトラブル

今回もPythonの話題です.

Pythonは便利な言語で,CGIサーバーも簡単に扱うことができます.
その辺の知識は全くなかったので,みんなのPython Webアプリ編 [みんなのシリーズ]を参考にしました.

CGIサーバーの勉強中にPythonスクリプトを呼び出せないというエラーが起きたので,その対処法をメモ代わりに残しておきます.
 
ここで扱う問題は,Windowsでコーディングし,Linuxでの動作確認時に起きた問題です.

CGIHTTPServerは,サーバーを起動したカレントディレクトリ上にあるcgi-bin内にあるPythonスクリプトを呼ぶことができます.
このPythonスクリプトがうまく実行されないという問題につまづきました.
起きた現象は以下の2つです.

① プログラムが実行されずWebブラウザがスクリプトファイルをダウンロードする.

② プログラムが実行されず,スクリプトファイルの中身が表示される.

▶ 原因と解決方法


それぞれの原因と解決方法を示します.

hoge.py:ここでは実行したいPythonスクリプトを表します.

①の原因

Pythonスクリプトに実行権限がないことが原因です.

実行させたいPythonスクリプトがあるディレクトリ(通常はcgi-bin)で,以下のコマンドを実行してみてください.

$ ls -l

そのときにの以下の様な結果が表示されます.

-rw-rw-r-- 1 usr usr 553 12月  9 15:51 hoge.py

該当する実行したいスクリプトファイルの「-rw-rw-r--」の部分を見てください.
ここの一番右が「x 」になっていない場合そのファイルに実行権限はありません.

①の解決方法

Pythonスクリプトに実行権限を与えれば解決です.
以下のコマンドを実行してください(hoge.pyは実行権限を与えたいスクリプトファイル名です).

$ chmod 755 hoge.py 

先ほどの「ls -l」で実行権限を確認します.
すると以下のように右端が「x」に変わっているはずです.

-rwxr-xr-x 1 hm hm 553 12月  9 15:51 hoge.py

以上で①の問題は解決されるはずです.
ちまにみに,これはちゃんと「みんなのPython」に書いてあります.

②の原因

・実行権限も与えたのにスクリプトが表示されるだけで実行できない.
・Windowsから移植したら動かなくなった.

以上のような場合はこの原因が考えられます.
以下のコマンドを実行してください.

$ file hoge.py 

そのときに以下のように表示されていれば,ここで解説する原因と一緒です.

hoge.py: a python\015 script, ASCII text executable, with CRLF line terminators

正常な場合は,以下のように表示されます.

hoge.py: a python script, ASCII text executable

これはWindowsの改行コード(CRLF)とLinuxの改行コード(LF)が異なることが問題になっています.

②の解決方法

文字コード変換ソフトで文字コードと改行コードを変換してください.
Linuxですと,nkfというコマンドが便利です.
参考:UNIX & Linux コマンド・シェルスクリプト リファレンス

$ nkf -file hoge.py > hoge_lf.py

これでhoge_lf.pyの改行コードを調べてみてください.

hoge_lf.py: a python script, ASCII text executable

上記のように表示されていれば成功です.

この他に問題が起きた場合は,以下のコマンドを実行してみてください.

$ ./hoge.py

このhoge.pyが実行できなければ,Linux上でスクリプトとして認識されていないか,実行権限に問題があると思いますので,その辺を中心に探ってみると良いかもしれません.

以上で,Pythonを使ったCGIサーバー実行時のトラブルのまとめを終わります.

No comments:

Post a Comment