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を探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
pythonでAmazonのほしいものリ...
-
Web初心者です。 簡易的なWebペ...
-
Google ColaboでGUI作成
-
JRのjsonファイルって使って大...
-
HTMLソースが表示のページのも...
-
ホログラムを作ってくれる会社...
-
Google Colabでimport soxが出...
-
pythonでのカーソル移動がずれる
-
Lazarus(IDE2.2.6)をインスト...
-
Processingについて
-
16x16のスプライトフォント
-
初心者powershellのPS1ファイル...
-
vba クリップボードクリアにつ...
-
python の 連鎖代入の文法
-
大学のプログラミングの授業で...
-
Pythonを勉強しています。
-
python エラー
-
Pythonでの文字列からfloatへの...
-
・オブジェクト指向のメリット...
-
最新のプログラム言語を学ぶに...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
URLに~/cgi-bin/~を隠す方法
-
CGIが動作しません。
-
apeboard+の設置について (UUHP)
-
apache で /cgi-bin/にアクセス...
-
ロリポップサーバでのWeb拍手cg...
-
PyCharmでのCGIを使ったWebサー...
-
エラーログの意味
-
Apacheでのコンテントネゴシー...
-
yomi-searchの登録者にメールを...
-
Apacheでphpとcgiを使いたいの...
-
WEBサーバーのCGIエラーについて
-
ショッピングカートのセキュリティ
-
exec cgi ="aaa.cgi" を有効に...
-
cgiのsystem関数を用い、ファイ...
-
httpd の1.42pで表示出来ないCG...
-
htmlにCGIプログラムの埋め方。
-
CGI掲示板について
-
下記の文章を翻訳願います
-
カウンターが表示されません;;
-
CLEVER BBSでテストしてみたん...
おすすめ情報
情報ありがとうございます。
パーミションの設定は合っています。
改行はおっしゃるようにCRLFになっていたので、LFに直しましたが、
結果は同じエラーが出ます。http://localhost:8000/の後の”cgi-bin”の"c"を打った
段階でエラーが出ます。
classの記述でSyntaxErroroが出るみたいです。
①は755でOKです。
②は特に問題ありません。
今度は、文法エラーはなくなりましたが、結果は今までと同じです。
ちょっと教えてほしいのですが、この問題は、cgi-binをCGIのフォルダとして認識
すべきところを、認識していないということなのでしょうか?
後、Macではなく、Windows用のPyCharmでやれば、この問題は解決するんでしょうか?