PyCharmで下記のCGIを使ったWebサーバーアプリを動かそうとすると下記のエラーが出ます。
http://localhost:8000/ へのアクセスはうまくいくのですが、
http://localhost:8000/cgi-bin/compound.py にアクセスしようとすると、
serving at port 8000
127.0.0.1 - - [27/Nov/2015 17:03:16] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [27/Nov/2015 17:03:35] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [27/Nov/2015 17:03:41] "GET /cgi-bin/compound.py HTTP/1.1" 200 -
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/http/server.py", line 1117, in run_cgi
os.execve(scriptfile, args, env)
OSError: [Errno 8] Exec format error: '/Users/xxxxxxx/PycharmProjects/Compound/cgi-bin/compound.py'
127.0.0.1 - - [27/Nov/2015 17:03:41] CGI script exit status 0x7f00
127.0.0.1 - - [27/Nov/2015 17:03:50] "GET /cgi-bin/compound.py HTTP/1.1" 200 -
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/http/server.py", line 1117, in run_cgi
os.execve(scriptfile, args, env)
OSError: [Errno 8] Exec format error: '/Users/xxxxxxx/PycharmProjects/Compound/cgi-bin/compound.py'
127.0.0.1 - - [27/Nov/2015 17:03:50] CGI script exit status 0x7f00
127.0.0.1 - - [27/Nov/2015 17:03:52] code 403, message CGI script is not a plain file ('/cgi-bin/')
127.0.0.1 - - [27/Nov/2015 17:03:52] "GET /cgi-bin/ HTTP/1.1" 403 -
127.0.0.1 - - [27/Nov/2015 17:04:06] "GET /cgi-bin/compound.py HTTP/1.1" 200 -
のエラーが出ます。どこが悪いのかが分かりかねています。ご経験のある方、ご教示いただけないでしょうか?
ディレクトリの構成は、Compoundプロジェクトの下にserver.pyファイルとcgi-binフォルダーがあり、cgi-binフォルダーの中に、compound.pyファイルがあります。環境はMacのOS-X(El Capitan)でブラウザはSafariを使っています。
ここから、
(server.pyファイル)
from http.server import HTTPServer, \
CGIHTTPRequestHandler
port = 8000
httpd = HTTPServer(('localhost', port),
CGIHTTPRequestHandler)
print('serving at port', port)
httpd.serve_forever()
(compound.pyファイル)
import cgi
def read(name):
s = form.getvalue(name, '0')
if s != '0':
global output
output += \
"<script>document.getElementsByName('" + \
name + "')[0].value='" + s + "'</script>\n"
return s
output = ''
form = cgi.FieldStorage()
html_body = """
<!DOCTYPE html>
<html>
<head lang='jp'>
<meta charset='utf-8'>
<title>複利計算</title>
</head><body>
<h2>1年もの定期預金の複利計算</h2>
<form method='post'>
元金:<input name='inputPrincipal'
value='100000' style='text-align: right;' />円
利子:<input name='inputInterest' value='1'
style='text-align: right;' />パーセント
<p><button type='submit'>
実行</button></p>
</form>
%s
</body></html>"""
existError = False
try:
principal = float(read('inputPrincipal'))
interest = float(read('inputInterest'))
except:
existError = True
if existError:
output += '入力値が不適切です'
else:
if principal != 0:
interest += 100.0
for i in range(1, 11):
principal = (principal * interest) / 100.0
output += '{0:0>2}'.format(i) + '年後:' + \
str(principal) + '円<br>\n'
print('Content-Type: text/html; charset=utf-8;\n')
print(html_body % output)
よろしくお願いいたします。
No.5ベストアンサー
- 回答日時:
>ちょっと教えてほしいのですが、この問題は、cgi-binをCGIのフォルダとして認識・・・
そうです。
ルートのserver.pyは動作しているようなので、
cgi-binでもCGIが動作するようにと・・・。
>後、Macではなく、Windows用のPyCharmでやれば、この問題は解決するんでしょうか?
Windowsだから、Macだからということではないと思います。
実は、かなり前にPythonでWebアプリを開発した経験があったので、何か役に立てればと思ったのですが・・・。
当時は、WindowsにNetbeans(IDE)とApache(Webサーバー)をインストールして動作させていました。
(PyCharmは使っていないのです・・・。(汗)
しかも、調べているうちに、WSGIというフレームワークやMVCモデルのサポートなど、かなり環境が変わっていて、少し参っていたところです。
http://p--q.blogspot.jp/2014/05/wsgi1pythonwsgi. …
ここの、Hello,world.のサンプルは問題なく動作すると思います。
http://d.hatena.ne.jp/uriyuri/20081024/1224839381
このサンプルも動作すると思うが、古いのでWSGIではない?
http://blog.sarabande.jp/post/81479479934
これを参考に、server.pyを書き換えてもらった。
http://docs.python.jp/3.3/howto/webservers.html
ここを基本にしています。「低レベルから見て」は理解できるのですが、
「後ろに下って: WSGI」あたりから???
参考にしてみてください。
ご指摘いただいた上記の参照例を調べて、理由が分かりました。
compound.pyのimport cgiの前に
#!/usr/bin/python
# -*- coding: utf-8 -*-
の2つの記述が抜けているためでした。
この2つの記述の追加でエラーを吐かなくなって意図した動作ができるようになりました。
ありがとうございました。
No.4
- 回答日時:
再度挑戦・・・(汗
(server.pyファイル)
from http.server import HTTPServer, CGIHTTPRequestHandler
class MyHandler(CGIHTTPRequestHandler):
cgi_directories = ['/cgi-bin', '/']
port = 8000
httpd = HTTPServer(('localhost', port), MyHandler)
print('serving at port', port)
httpd.serve_forever()
これで、どうですか?
No.2
- 回答日時:
>code 403, message CGI script is not a plain file ('/cgi-bin/')
このエラーメッセージが問題で、
cgi-binをCGIのフォルダとして認識していません。
(server.pyファイル)
from http.server import HTTPServer, \
CGIHTTPRequestHandler
の部分を
(server.pyファイル)
from http.server import HTTPServer, \
class MyHandler(CGIHTTPRequestHandler):
cgi_directories = ['/cgi-bin']
としても駄目ですか?
No.1
- 回答日時:
compound.pyの実行権限は間違っていませんか?
ls -l
で確認して、compound.pyが
drwxr-x-x
になっていなければ、
chmod 755 compound.py
で権限を変更してください。
また、改行コードもCRLFではなく、LFだったと思うので
そちらも確認してみてください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・【大喜利】【投稿~8/27】 こんなガソリンスタンド二度と来るか!なぜそう思った?
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・【お題】動物のキャッチフレーズ
- ・【お題】甲子園での思い出の残し方
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・自分用のお土産
- ・人生で一番お金がなかったとき
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・ちょっと先の未来クイズ第1問
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
apache で /cgi-bin/にアクセス...
-
EXCELファイルに誰がアクセスし...
-
VBAを使用して、外部サーバのフ...
-
mailformのCGI設置で「Internal...
-
ASPから既存のexcelブックを開...
-
エラーの意味がわかりません
-
ApacheでのCGIについての質問
-
《エクセルVBA》「他の人が該当...
-
ラジオボタンのグループ化
-
vbでFTPサーバーに対して、サー...
-
ASPからJavaScriptへの受け渡し...
-
ftpでuploadのとき上書きとする...
-
初心者です。助けて下さいq(T▽T...
-
全文検索NAMAZUを複数設置する...
-
Perlでファイルをアップロード...
-
CGIでソースがそのままでてしま...
-
IISのSSIの設定について
-
tableのthに斜めの線をCSSで入...
-
株価の動き
-
HP-UX (IA64)にVNC等でリモート...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
URLに~/cgi-bin/~を隠す方法
-
apache で /cgi-bin/にアクセス...
-
PyCharmでのCGIを使ったWebサー...
-
cgiのパスについて
-
CGIが読み書きするファイルで
-
cgiでのアクセスカウンターの表...
-
CGIが動作しません。
-
$ENV{'QUERY_STRING'}以外で引...
-
Apacheでphpとcgiを使いたいの...
-
lolipopでsendmailは使えません...
-
cgiのsystem関数を用い、ファイ...
-
ローカル環境でのCGI
-
VertrigoServでPerlが利用できない
-
フリー配布CGIのファイル名変更
-
メール送信フォームのログファ...
-
.diff のあて方
-
相対パスか絶対パス??
-
EXCELファイルに誰がアクセスし...
-
《エクセルVBA》「他の人が該当...
-
VBAでサーバーにアクセスするに...
おすすめ情報
情報ありがとうございます。
パーミションの設定は合っています。
改行はおっしゃるようにCRLFになっていたので、LFに直しましたが、
結果は同じエラーが出ます。http://localhost:8000/の後の”cgi-bin”の"c"を打った
段階でエラーが出ます。
classの記述でSyntaxErroroが出るみたいです。
①は755でOKです。
②は特に問題ありません。
今度は、文法エラーはなくなりましたが、結果は今までと同じです。
ちょっと教えてほしいのですが、この問題は、cgi-binをCGIのフォルダとして認識
すべきところを、認識していないということなのでしょうか?
後、Macではなく、Windows用のPyCharmでやれば、この問題は解決するんでしょうか?