Python3でHello worldするCGIスクリプト

サンプルです。


                #!/home/user_name/local/python/bin/python
                # coding: utf-8
                print('Content-type: text/html; charset=UTF-8\r\n')
                print("HelloWorld!")
          

Content-typeヘッダは必ず出力させます。 末尾にはヘッダの終わりを示す改行コード\r\nを書きます。

ソースファイルは以下を満たすようにします。

うまく作成できていれば、こんな感じになります。

日本語の文字列の出力

日本語の文字列の出力にはもう一手間必要です。以下、動かないサンプルです。


                #!/home/user_name/local/python/bin/python
                # coding: utf-8
                print('Content-type: text/html; charset=UTF-8\r\n')
                print("はろー")
            

実行しても何も出ないと思います。 以下、動くサンプルです。


                #!/home/user_name/local/python/bin/python
                # coding: utf-8
                import sys
                import io
                sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
                print('Content-type: text/html; charset=UTF-8\r\n')
                print("はろー")
            

Pythonにデフォルトで設定されている文字コードはUS-ASCIIなので、 UTF-8になるように出力をラップしています(参考URL)。 これを書くと動きます。

動いているものがこちら

手元の環境でCGIスクリプトをテストする方法

PythonにはローカルでCGIをデバッグするためのライブラリが用意されています。Python2ではCGIHTTPServerというライブラリでしたが、Python3ではhttp.serverでCGIのテストが行えます。以下、サンプルです。


              import http.server
              http.server.test(HandlerClass=http.server.CGIHTTPRequestHandler)
          

上記のサンプルコードがtest.py、テストしたいCGIスクリプトがcgi.pyという名前で保存されているものとします。ファイルは以下のように配置します。

cgi_testフォルダに各種ファイルを保存しています。 test.pyを実行して、localhostの8000番ポート(http://localhost:8000)にアクセスするとindex.htmlが表示されます。 cgi.pyをテストするには、http://localhost:8000/cgi-bin/cgi.pyにアクセスします。