pythonでCGIに手を出してつまづいた時。
さくらインターネットのレンタルサーバーでpython動かしたくて。
python3のインストールまでは
こちらのサイトを、
CGIを使えるようにするまでは
こちらのサイトを参考にさせて頂いて、
とりあえず動くところまでさくっと完了。でもさすがに開発はローカルでやりたいなーって思ってやり始める。そして完全に初歩的なところでハマった。。
CGIスクリプトを動かすまで
macとpythonはこれ。
- macOS Sierra
- Python 3.6.0 :: Anaconda 4.3.1 (x86_64)
使うライブラリはこれ。情報が溢れてるから。
- http.server
作るファイルはこれ
# -*- Coding: utf-8 -*- import http.server http.server.test(HandlerClass=http.server.CGIHTTPRequestHandler)
と、これ
#!/usr/bin/python # -*- Coding: utf-8 -*- print("Content-type: text/html") print("") print(“cgitest”)
cgi.pyをcgi-binフォルダに格納。cgiserver.pyを実行、ちゃんと動いてると
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) …
ってなるから、その後
にアクセス。cgi-binとcgiserver.pyは同じ階層。
確認するところ
パーミッション
macの場合、cgi.pyのパーミッションを755に。
格納ディレクトリ
CGIHTTPRequestHandlerを使う時のCGIスクリプトを格納するディレクトリは、”cgi-bin” か ” htbin” じゃないとダメっぽい。
pythonの1行目
cgi.pyの1行目
#!/usr/bin/python
は
#!/usr/bin/env python
にすると動く場合があるらしい。
ヘッダの終わりを示す空行
print(“”)はヘッダの終わりを表すから必要。
空行は
print(“”)
でも良いし、
print(“\r\n\r\n”)
じゃないとダメとか
print(“\n\n”)
じゃないとダメとか
print(“\n”)
じゃないとダメとか、ちらほら見たけど自分の環境ではどれでも動いた。
改行コード
上記に関係してるのかもしれないけど、改行コードにも注意。
- macOSとかのUnix系:LF
- Windows:CRLF
- Mac OS(9まで):CR
これにハマりかけた。
shebang
ちなみに自分が最もハマったのは、もっともっと初歩的なところで、
shebangを1行目に書いていなかったという。。
本当に1行目じゃないとダメらしい。上が詰まってる感じが嫌で1行目空行にして大抵2行目から書いてたからな。。ページを表示すると画面真っ白だという。。
てことで無事解決。
import cgi をするとき
無事解決かと思いきや、GET とか POST の値をとるために import cgi をするとブラウザ表示するときに
cgitestContent-type: text/html cgitest
と2回表示されるようになった。
問題はファイル名。cgiライブラリは cgi.py という名前だから被ってるから cgi.pyをリネームしてcgiserver.pyを実行し直せばOK。
ここも意外とハマった。。あんまり情報がなかったから、みんなこんなところでは躓かないんだろう。。
てことで、ようやく解決。だと思いたい。
コメント