Python CGIスクリプトの実行結果をブラウザに送信・表示する方法
Python CGIスクリプトの結果をブラウザに送信する方法
PythonでCGI(Common Gateway Interface)スクリプトを作成すると、処理結果は標準出力(stdout)を通じてWebサーバーに渡され、その後ブラウザへ送信されます。結果を正しく表示させるためには、HTTPヘッダーとHTML本文を適切な順序で出力することが重要です。
基本的な流れ
- Content-Typeヘッダーを出力する — 送信するデータがHTMLであることをブラウザに伝えます。
- 空行を挿入する — ヘッダーと本文の区切りとして、必ず1行の空行が必要です。
- HTML本文を出力する — 実際にブラウザへ表示される内容を記述します。
サンプルコード:フォームデータを受け取って表示する
以下は、HTMLフォームから送信された「名前」を取得し、挨拶メッセージとしてブラウザに表示するCGIスクリプトの例です。
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import cgi
# フォームデータを解析
form = cgi.FieldStorage()
# HTMLページのフィールドからデータを取得
first_name = form.getvalue('first_name')
last_name = form.getvalue('last_name')
# ブラウザへデータを送信
print("Content-type:text/html\r\n\r\n")
print("<html>")
print("<head>")
print("<title>Hello - Second CGI Program</title>")
print("</head>")
print("<body>")
print("<h2>Hello %s %s</h2>" % (first_name, last_name))
print("</body>")
print("</html>")※ コード内の < や > は、実際には通常のタグ記号(<・>)を使用してください。
ポイント解説
print("Content-type:text/html\r\n\r\n")のように、ヘッダーの直後に\r\n\r\nを付けることで、ヘッダーと本文を区切る空行をまとめて出力できます。cgi.FieldStorage()は、GET・POSTどちらのリクエストでもフォームデータを取得できる便利なクラスです。%sプレースホルダーを使うことで、取得した名前を文字列の中に埋め込んでいます。- ヘッダー後の空行がないと「500 Internal Server Error」が発生するため、必ず入れるようにしましょう。
補足:現代のPython開発において
CGIは仕組みがシンプルで学習しやすい反面、リクエストごとにプロセスが起動するためパフォーマンス面で不利です。現在の実務ではFlaskやDjangoなどのフレームワークを使うのが主流ですが、CGIの動作原理を理解しておくことは、Webアプリケーションの基礎を身につけるうえで非常に役立ちます。
-
Pythonで文字「G」のパターンを出力するプログラム
コンソールにアスタリスク(*)を使って文字「G」のパターンを表示したい場合、専用の関数を定義し、二重ループ(ネストされたループ)で行と列を走査しながら、条件に合致する位置だけ「*」を出力する方法が有効です。以下に実際の実装例を示します。サンプルコードdef display_pattern(my_line): my_pattern = for i in range(my_line): for j in range(my_line): if ((j == 1 and i != 0 and i != my_line - 1)
-
Pythonでパターンを出力する方法|三角形・数字・アルファベット・ピラミッドのコード例
Pythonでパターンを出力するには、ネストされた(入れ子構造の)forループを使用します。外側のループで行数を制御し、内側のループで列数を処理します。そしてprint文を工夫することで、目的に応じたさまざまなパターンを作成できます。パターンには、星(アスタリスク)パターン、数字パターン、アルファベットパターンなどがあり、三角形やピラミッドなど、さまざまな形状にも対応できます。パターン出力の基本これらのパターンは、print文を少し変更しながらforループを組み合わせることで出力できます。基本的な考え方はどのパターンも共通しており、違いはごくわずかです。ここからは、代表的なパターンのコードを実