
OS:macOS
「実戦力を身につけるPythonの教科書 クジラ飛行机」を使用してpythonの学習をしています。
その中でp.216にある一番簡単なWebアプリというプログラムを作成している最中に発生したエラーです。
Apacheなどは使用してません。
本に載っていたものとは少し違いますが、コードがこうなっています。
#! usr/bin/env python3 #-*- coding:utf-8 -*- #import import sys def main(): #ヘッダ情報を出力 print("Content-Type: text/html; charset=utf-8") #ヘッダと本体データを区切る空行 print("") #本体のデータを出力 print("<html><head><meta charset='utf-8'><body>") print("聞くことに速く語ることに遅くあるべき") print("</body></html>") return 0 if __name__ == '__main__': sys.exit(main())
下記のコマンドも実行しましたが、
chmod +x cgi-bin/kakugen.py
webブラウザで指定したポード番号の「http://localhost----」にアクセスすると
Error response Error code: 403 Message: CGI script is not a plain file ('/cgi-bin/'). Error code explanation: HTTPStatus.FORBIDDEN - Request forbidden -- authorization will not help.
というエラーが表示されます。
パーシッションエラーということで、管理者権限を付与しなくても良い場所(/User)に置いて実行してみたのですが、その際はプログラムのコードが文字化けした状態で表示されました。
どのようにすればエラーがなくなりますでしょうか?

サーバー(?)のOSと、ファイルのパーミッション(AdminかGuestかとかではなく、むしろCGIの読み書き実行)の設定状況を書いた方がよいと思われます。
OSはmacOSです。 ファイルのパーミッションの設定状況はどこで見れるのでしょうか? プログラムを置いているファイルの情報を見るという欄から読み書きを全て許可するという設定に変更できていると思うのですが… Desktop/chapter5-2/cgi-bin/kakugen.py というふうに置いていて、cgi-binの中にはkakugen.pyしか入っていません。

MACを使っていないので何とも言えませんが、403エラーはアクセス拒否ですので、実行できないだろうと踏んでコメントしました。社内アクセスしかできない場所に社外からアクセスしようとして拒否られているような状態です。"chmod 755 対象ファイル" の操作を一度試してみてください。
試してみた結果、何も表示されなくなりました。 コマンドラインにはCGI script exit status 0x7f00と表示されました。 本にこのエラーの対処方法が書かれていて、改行コードをCR+LFからLFに変更して保存しろとありました。 調べた限りでは、LFで保存できていると思われるのですが、変更できていないのでしょうか?

> 何も表示されなくなりました。 これは悪化した、ということでしょうか? > 改行コードを atomやその他エディタで改行コードがちゃんとなっていれば大丈夫だと思います。 あと何か言えるとすれば、タグにcgiだとかそっち系のタグをつけた方がよいです(詳しい人がたくさん見てくれます。
ブラウザが真っ白の状態になったということなので、悪化したのかはわかりません... タグ追加します。
「localhostに接続すると」の「localhostに接続する」とは具体的にどういうことでしょうか。WEB ブラウザで「http://localhost/」にアクセスした、ということでしょうか。
webブラウザで指定したポート番号の「http://localhost----」にアクセスしたということです。
どういうディレクトリ構成になっているのか、http サーバはどのように起動しているのか (たとえば、「python -m http.server --cgi」とターミナルに打って起動している、とか)、ブラウザのアドレス欄には何を入力した(「http://localhost:8080/cgi-bin/kakugen.py」とか。「http://localhost----」とか変にぼかした書きかたではなく)、とか、全部、できるだけ具体的に書いてください。諸事情により具体的に書けない箇所は、隠すのはしかたありませんが、隠す範囲はできるだけ小さくして、その旨断わるようにしてください。

回答2件
あなたの回答
tips
プレビュー