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で質問しましょう!
似たような質問が見つかりました
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- JavaScript switch文のswitch(n)の部分を複数の値にするか、if文に変えてほしいです。 1 2022/07/27 17:18
- PHP PHPのエラーの解消法について教えて下さい。 1 2023/02/06 10:48
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- JavaScript セレクトボックスを2つ設けて選択して初めてメッセを表示 1 2022/07/27 12:15
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- PHP php ログイン 1 2022/11/01 00:24
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
URLに~/cgi-bin/~を隠す方法
-
EXCELファイルに誰がアクセスし...
-
MP Form Mail CGI で 500サーバ...
-
WEBデザイナーの方にお聞きした...
-
《エクセルVBA》「他の人が該当...
-
AS/400 QUERYの集計結果について
-
VBAでサーバーにアクセスするに...
-
ラジオボタンのグループ化
-
CGIって何ですか?簡潔に教えて...
-
CGIでソースがそのままでてしま...
-
特定のCGIだけ、作動するかわり...
-
VBScriptで、ファイルから任意...
-
ログアウト処理でWebブラウザを...
-
tableのthに斜めの線をCSSで入...
-
perlからphpを実行して結果を得...
-
SNSプログラムを探しています。
-
HTTP 501未実装 エラーについて
-
掲示板のアイコン設定の仕方教...
-
パーミッションが変更できません。
-
ユーザの所属するグループを取...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
URLに~/cgi-bin/~を隠す方法
-
cgiが動作しないのは?
-
apache で /cgi-bin/にアクセス...
-
CGIが動作しません。
-
PyCharmでのCGIを使ったWebサー...
-
相対パスか絶対パス??
-
http://www.test.cgi/index な...
-
下記の文章を翻訳願います
-
cgi-bin内に.htaccess
-
SSIで,CGIを実行するときに引...
-
cgiでのアクセスカウンターの表...
-
カウンターが表示されません;;
-
cgiのsystem関数を用い、ファイ...
-
FC2にwebPatio設置の方法
-
cgiなんですが....
-
pythonのCGIでページを遷移したい
-
cgi-binにアクセスするとforbid...
-
ロリポップサーバでのWeb拍手cg...
-
ショッピングカートのセキュリティ
-
ホームページビルダーで作成し...
おすすめ情報
情報ありがとうございます。
パーミションの設定は合っています。
改行はおっしゃるようにCRLFになっていたので、LFに直しましたが、
結果は同じエラーが出ます。http://localhost:8000/の後の”cgi-bin”の"c"を打った
段階でエラーが出ます。
classの記述でSyntaxErroroが出るみたいです。
①は755でOKです。
②は特に問題ありません。
今度は、文法エラーはなくなりましたが、結果は今までと同じです。
ちょっと教えてほしいのですが、この問題は、cgi-binをCGIのフォルダとして認識
すべきところを、認識していないということなのでしょうか?
後、Macではなく、Windows用のPyCharmでやれば、この問題は解決するんでしょうか?