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

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

ただいまの
回答率

87.60%

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

解決済

回答 2

投稿

  • 評価
  • クリップ 1
  • VIEW 1,215

score 10

前提・実現したいこと

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

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

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

Error response
Error code 404.

Message: File not found.

Error 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'

      

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

該当のソースコード

#! C:\Python27_x86\python
# coding:utf-8

import cgi
import os, sys
import ConfigParser

try:
    import msvcrt
    msvcrt.setmode(0, os.O_BINARY)
    msvcrt.setmode(1, os.O_BINARY)
except ImportError:
    pass

inifile = ConfigParser.SafeConfigParser()
inifile.read("./config.ini")
user_name = inifile.get("settings","user")

top_dir = r"C:\Users\***\Desktop\oneday"
upload_dir = top_dir + "\\" +user_name + r"\interaction\orig"
output_dir = top_dir + "\\" + user_name +  r"\interaction\face"
file_path = r""
log_path = top_dir+ "\\" + user_name + r"\interaction"
processing_flag = False
facial_class = ["Neutral","Anger","Happiness"]

dic_pic_flag = False#辞書用画像かどうかの判断

#コンテンツのMIMEを指定
#print('Content-Type:text/plain\n')
print 'Content-Type:text/plain\n'

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

else:
    htmltext = ""

    form = cgi.FieldStorage()

    if form.has_key("image"):
        fileitem = form["image"]
        if(fileitem.file):
            file_path =os.path.join(upload_dir,os.path.basename(fileitem.filename))
            fout = file (file_path, 'wb')
            while 1:
                chunk = fileitem.file.read(100000)
                if not chunk: break
                fout.write (chunk)
            fout.close()
            processing_flag = True

        else:
            htmltext = '-10' # not found file
    else:
         htmltext = '-20' # not found key


    for fclass_label in facial_class:#辞書用画像かチェック
        if fclass_label in fileitem.filename:
            dic_pic_flag = True
            break

    if processing_flag:
        import kiridashi
        out_path =os.path.join(output_dir,os.path.basename(fileitem.filename))
        kiridashi.processing_kiridashi(file_path,out_path)

        if(not dic_pic_flag):#辞書画像作成時は類似度計算しない
            import Calc_on_EMC
            sim_and_fclass = Calc_on_EMC.Calc(file_path)

            with open(log_path+r"\result.txt","a") as f:
                if sim_and_fclass.result >= 0:#顔検出された
                    f.write(fileitem.filename + " / class is " + facial_class[sim_and_fclass.result] + "\n")
                    htmltext = str(sim_and_fclass.result)

                    with open(log_path+r"\sim.csv","a") as sim_file: #類似度書き出し
                        sim_file.write(fileitem.filename)
                        for sim_array in sim_and_fclass.sim:
                            for sim_value in sim_array:
                                sim_file.write(","+str(sim_value))
                                htmltext += ","+str(sim_value)
                        sim_file.write("\n")
                else:#顔が検出されなかった
                    f.write(fileitem.filename + " / No detect \n")
                    htmltext = str(sim_and_fclass.result)+",0,0,0"

    print htmltext

試したこと

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

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

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • wwbQzhMkhhgEmhU

    2019/01/29 02:31

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

    キャンセル

回答 2

check解決した方法

0

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

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

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


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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/01/30 11:28

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

    キャンセル

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

  • ただいまの回答率 87.60%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る