🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
CGI

CGI(Common Gateway Interface)とは、Webサーバー上でユーザプログラム動作させる仕組みのこと。また、動かす前提のプログラムをCGIと呼ぶこともあります。HTMLなどの静的な情報に限らず、プログラムの処理結果をベースにした動的情報の提供が可能です。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

2583閲覧

pythoでのcgiでのwebアプリ実行について教えて下さい。

masa1975

総合スコア22

CGI

CGI(Common Gateway Interface)とは、Webサーバー上でユーザプログラム動作させる仕組みのこと。また、動かす前提のプログラムをCGIと呼ぶこともあります。HTMLなどの静的な情報に限らず、プログラムの処理結果をベースにした動的情報の提供が可能です。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/12/10 08:06

編集2019/12/12 22:50

Pythonの教科書にある1行チャットを作ってみようと思い写経して
webサーバーにて実行したのですが画面が真っ白のままで何も映りません。
以前にも同じような質問をされている方がいましたので、そこにあるコードと
見比べたのですが、おんなじコードだったので行き詰ってしまいました。
アドバイスいただけましたら幸いです。

発生している問題・エラーメッセージ

コード実行時にanacondaプロンプトにはこのようなメッセージが出ていました。

Serving HTTP on 0.0.0.0 port 8080 (http://0.0.0.0:8080/) ... 127.0.0.1 - - [13/Dec/2019 07:46:23] "GET /cgi-bin/chat.py HTTP/1.1" 200 - 127.0.0.1 - - [13/Dec/2019 07:46:23] command: C:\Users\HP\Anaconda3\python.exe -u C:\Users\hoge\cgi-bin\chat.py "" 127.0.0.1 - - [13/Dec/2019 07:46:24] CGI script exited OK 127.0.0.1 - - [13/Dec/2019 07:46:33] code 404, message File not found 127.0.0.1 - - [13/Dec/2019 07:46:33] "GET /favicon.ico HTTP/1.1" 404 -

該当のソースコード

anakonnda コマンドプロンプトにて

python -m http.server --cgi 8080

を入力してローカル環境を設定した後

http://localhost:8080/cgi-bin/chat.py

にて実行しましたが画面は真っ白のままでした。

python

1 2 3#!/usr/bin/env python 4import cgi 5import cgitb 6import os.path 7import html 8 9cgitb.enable() 10FILE_LOG = "chat-log.txt" 11 12def print_html(body): 13 print("Content-type: text/html: charset=utf-8") 14 print("") 15 print(""" 16 <html><head><meta charset="utf-8"> 17 <title>チャット</title></head><body> 18 <h1>チャット</h1> 19 <div><form> 20 名前: <input type="text" name="name" size="8"> 21 本文: <input type="text" name="body" size="20"> 22 <input type="submit" value="発言"> 23 <input type="hidden" name="mode" value="write"> 24 </form></div><hr> 25 {0} 26 </body></html> 27 """.format(body)) 28 29def mode_read(form): 30 log = "" 31 if os.path.exists(FILE_LOG): 32 with open(FILE_LOG, "r", encoding='utf-8') as f: 33 log = f.read() 34 print_html (log) 35 36def jump(url): 37 print("status: 301 moved permanently") 38 print("location:" + url) 39 print("") 40 print('<html><head>') 41 print('<meta http-equiv="refresh" content="0;'+url+'">') 42 print('</head><body>') 43 print('<a herf="'+url+'">jump</a></body></html>') 44 45def mode_write(form): 46 name = form.getvalue("name", "no name") 47 body = form.getvalue("body", "") 48 name = html.escape(name) 49 body = html.escape(body) 50 51 with open(FILE_LOG, "a+", encoding='utf-8') as f: 52 f.write("<p>{0}: {1}</p><hr>\n".format(name,body)) 53 jump('chat.py') 54 55def main(): 56 form = cgi.FieldStorage() 57 mode = form.getvalue("mode", "read") 58 if mode =="read": mode_read(form) 59 elif mode =="write": mode_write(form) 60 else: mode_read(form) 61 62if __name__ =="__main__": # --- 63 main()

コード内にて間違いがあるのかとも思い何度も見直しましたが
解らないため、お願いいたします。

試したこと

補足情報(FW/ツールのバージョンなど)

Windows10
pytho3.7

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nskydiving

2019/12/10 09:24

1.コードのインデントが崩れているため、このままでは実行できません。コードを<code>タグで括ってください。 2.Webサーバーや実行コマンドのことが記載されていませんが、どうやって実行しているのでしょうか?
masa1975

2019/12/11 01:07

初めての質問でよくわかっておらず、大変申し訳ありませんでした。 ご指摘いただいたように修正いたしましたので、お願いいたします。
nskydiving

2019/12/11 16:39

URLにアクセスした際に、コマンドプロンプト上に何かエラーメッセージは表示されていないでしょうか?
masa1975

2019/12/12 22:52

実行時にコマンドプロンプトに表示されていたメッセージを追加させていただきました。
guest

回答1

0

ベストアンサー

code 404, message File not foundというエラーが出ていますので、スクリプトファイル「chat.py」が見つからないということだと思います。

以下のパスに誤りがないか確認してみてください。

  • 「chat.py」の配置してあるディレクトリのパス
  • アクセスしている URL のパス
  • 「python -m http.server --cgi 8080」を実行しているパス

投稿2019/12/13 03:46

nskydiving

総合スコア6500

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問