質問: NginxでPythonプログラムを動かすにはuWSGIを使って、 Nginx + uWSGI + Python という組み合わせで動かすことが、よく紹介されています。 しかし、uWSGIでは一つのポート番号やsockで動かせるPythonプログラムは1つです。 PHPやhtmlのように、フォルダにプログラムファイルを置いておいたら、そのファイルにアクセスしたときに動かすようにしたいと思っています。 Pythonでもこのようなことができるのでしょうか?uWSGIを使わなくてもかまいません。 このようなことはできるのでしょうか? ご存知の方、ご教示お願いします。
回答: PythonでもCGIプログラムを書くことは可能です。 公式マニュアルだと「21.2. cgi — CGI (ゲートウェイインタフェース規格) のサポート」に解説があります。 下のようなPythonスクリプトを書いて、CGIスクリプトを置くディレクトリに置いてやれば動作します。 ``` #!/usr/bin/python3 print("Content-Type: text/html") print("This is my first CGI script") print("Hello, world!") ``` スクリプトを見ればわかるように、基本'print'を使う必要があり、PHPのようにHTMLの中にプログラムを埋め込むことは単純にはできないので、PythonでCGIのスクリプトを書くのはPHPで書くよりかなり手間になります。 また、古典的CGIの処理は遅いので、FirstCGIを使おうとすると設定が難しくなります。 参照: How to setup Python with Lighttpd and FastCGI (like PHP) Pythonでは、WSGIがWebサーバとWebアプリケーションを接続するための標準仕様です。そのため、Pythonの仕様自体がPHPのようにCGIを使うようには開発されていません。それで、Python でWebアプリケーションを作る場合はWSGIを使うことを勧めます。 なお、uWSGIはWSGIを実装した製品名です。WSGIの実装には、uWSGIの他にgunicornや最近開発されたnginx unitがあります。