質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.50%
CGI

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

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Q&A

解決済

2回答

563閲覧

windows10にpython2.7 32bitでcgiを使ってサーバーが建てられません

nedu1215

総合スコア10

CGI

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

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

0グッド

1クリップ

投稿2019/01/28 03:57

前提・実現したいこと

windows10にpython2.7 32bitでcgiを使ってサーバーを建てようとしています.

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

google cromeでアクセスするとこのように表示されます.

webエラーメッセージ

1Error response 2Error code 404. 3 4Message: File not found. 5 6Error code explanation: 404 = Nothing matches the given URI.

該当のソースコードが.pyファイルでpyファイルを実行すると

Content-Type:text/plain Traceback (most recent call last): File "oneday.py", line 33, in <module> if os.environ['REQUEST_METHOD'] != 'POST': File "C:\Python27\lib\os.py", line 425, in __getitem__ return self.data[key.upper()] KeyError: 'REQUEST_METHOD'

というエラーになります.

該当のソースコード

python2.7

1#! C:\Python27_x86\python 2# coding:utf-8 3 4import cgi 5import os, sys 6import ConfigParser 7 8try: 9 import msvcrt 10 msvcrt.setmode(0, os.O_BINARY) 11 msvcrt.setmode(1, os.O_BINARY) 12except ImportError: 13 pass 14 15inifile = ConfigParser.SafeConfigParser() 16inifile.read("./config.ini") 17user_name = inifile.get("settings","user") 18 19top_dir = r"C:\Users***\Desktop\oneday" 20upload_dir = top_dir + "\" +user_name + r"\interaction\orig" 21output_dir = top_dir + "\" + user_name + r"\interaction\face" 22file_path = r"" 23log_path = top_dir+ "\" + user_name + r"\interaction" 24processing_flag = False 25facial_class = ["Neutral","Anger","Happiness"] 26 27dic_pic_flag = False#辞書用画像かどうかの判断 28 29#コンテンツのMIMEを指定 30#print('Content-Type:text/plain\n') 31print 'Content-Type:text/plain\n' 32 33if os.environ['REQUEST_METHOD'] != 'POST': 34 print '不正なアクセスです。POSTでアクセスしてください' 35 36else: 37 htmltext = "" 38 39 form = cgi.FieldStorage() 40 41 if form.has_key("image"): 42 fileitem = form["image"] 43 if(fileitem.file): 44 file_path =os.path.join(upload_dir,os.path.basename(fileitem.filename)) 45 fout = file (file_path, 'wb') 46 while 1: 47 chunk = fileitem.file.read(100000) 48 if not chunk: break 49 fout.write (chunk) 50 fout.close() 51 processing_flag = True 52 53 else: 54 htmltext = '-10' # not found file 55 else: 56 htmltext = '-20' # not found key 57 58 59 for fclass_label in facial_class:#辞書用画像かチェック 60 if fclass_label in fileitem.filename: 61 dic_pic_flag = True 62 break 63 64 if processing_flag: 65 import kiridashi 66 out_path =os.path.join(output_dir,os.path.basename(fileitem.filename)) 67 kiridashi.processing_kiridashi(file_path,out_path) 68 69 if(not dic_pic_flag):#辞書画像作成時は類似度計算しない 70 import Calc_on_EMC 71 sim_and_fclass = Calc_on_EMC.Calc(file_path) 72 73 with open(log_path+r"\result.txt","a") as f: 74 if sim_and_fclass.result >= 0:#顔検出された 75 f.write(fileitem.filename + " / class is " + facial_class[sim_and_fclass.result] + "\n") 76 htmltext = str(sim_and_fclass.result) 77 78 with open(log_path+r"\sim.csv","a") as sim_file: #類似度書き出し 79 sim_file.write(fileitem.filename) 80 for sim_array in sim_and_fclass.sim: 81 for sim_value in sim_array: 82 sim_file.write(","+str(sim_value)) 83 htmltext += ","+str(sim_value) 84 sim_file.write("\n") 85 else:#顔が検出されなかった 86 f.write(fileitem.filename + " / No detect \n") 87 htmltext = str(sim_and_fclass.result)+",0,0,0" 88 89 print htmltext

試したこと

apacheでの実行も試しましたがいきませんでした

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

ここにより詳細な情報を記載してください。

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

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

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

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

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

wwbQzhMkhhgEmhU

2019/01/28 17:31

できることを一歩ずつやっていくようにしてください。 いきなり100歩先の結果を望むのであれば、お金を払って他人にやってもらうしかないです。
guest

回答2

0

自己解決

今回の問題は,関係があるかわかりませんが,表記に関する問題を解決することで可能になりました.
Importの下(7行目)に
print 'Content-type: text/html; charset=UTF-8\r\n'
を追加することで解決しました.

投稿2019/01/30 04:22

nedu1215

総合スコア10

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

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

0

回答失礼します。
どうやら環境変数を取得するところでエラーが起きているようです。

Python

1if os.environ['REQUEST_METHOD'] != 'POST': 2 print '不正なアクセスです。POSTでアクセスしてください'

この部分でREQUEST_METHODなんて名前の環境変数は存在しないよ!って言っています。
環境変数がきちんと設定されているか、一度見直してみてはいかがでしょうか?
あと、os.environ['']は、その環境変数が設定されていないとKeyErrorが発生してしまうので、os.environ.get('', object)を使用するのをおすすめします。
これは''の名前の環境変数があるか探し、なかった場合はobjectを返すというものです。
これを使えば、たとえ環境変数が設定されていなかったとしてもその後のフォローができるのでおすすめです。

投稿2019/01/29 13:43

shun-shobon

総合スコア50

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

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

nedu1215

2019/01/30 02:28

pythonで実行しているためImport CGIでinstallされるのですが,コンソール実行時に,CGI系が読み込めていないみたいです.os.environをPRINTすると出てきませんでした.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問