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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Webサーバー

Webサーバーとは、HTTPリクエストに応じて、クライアントに情報を提供するシステムです。

Q&A

解決済

2回答

9037閲覧

pythonの簡易サーバ(cgi)を使用してのWebアプリが動作しない

stoyonakahukuc

総合スコア8

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Webサーバー

Webサーバーとは、HTTPリクエストに応じて、クライアントに情報を提供するシステムです。

0グッド

0クリップ

投稿2017/08/20 12:59

編集2017/08/28 23:15

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)に置いて実行してみたのですが、その際はプログラムのコードが文字化けした状態で表示されました。

どのようにすればエラーがなくなりますでしょうか?

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/08/20 13:09

サーバー(?)のOSと、ファイルのパーミッション(AdminかGuestかとかではなく、むしろCGIの読み書き実行)の設定状況を書いた方がよいと思われます。
stoyonakahukuc

2017/08/20 13:19

OSはmacOSです。 ファイルのパーミッションの設定状況はどこで見れるのでしょうか? プログラムを置いているファイルの情報を見るという欄から読み書きを全て許可するという設定に変更できていると思うのですが… Desktop/chapter5-2/cgi-bin/kakugen.py というふうに置いていて、cgi-binの中にはkakugen.pyしか入っていません。
退会済みユーザー

退会済みユーザー

2017/08/20 22:23

MACを使っていないので何とも言えませんが、403エラーはアクセス拒否ですので、実行できないだろうと踏んでコメントしました。社内アクセスしかできない場所に社外からアクセスしようとして拒否られているような状態です。"chmod 755 対象ファイル" の操作を一度試してみてください。
stoyonakahukuc

2017/08/20 23:05

試してみた結果、何も表示されなくなりました。 コマンドラインにはCGI script exit status 0x7f00と表示されました。 本にこのエラーの対処方法が書かれていて、改行コードをCR+LFからLFに変更して保存しろとありました。 調べた限りでは、LFで保存できていると思われるのですが、変更できていないのでしょうか?
退会済みユーザー

退会済みユーザー

2017/08/21 09:48

> 何も表示されなくなりました。 これは悪化した、ということでしょうか? > 改行コードを atomやその他エディタで改行コードがちゃんとなっていれば大丈夫だと思います。 あと何か言えるとすれば、タグにcgiだとかそっち系のタグをつけた方がよいです(詳しい人がたくさん見てくれます。
stoyonakahukuc

2017/08/21 23:56

ブラウザが真っ白の状態になったということなので、悪化したのかはわかりません... タグ追加します。
stoyonakahukuc

2017/08/28 23:13

webブラウザで指定したポート番号の「http://localhost----」にアクセスしたということです。
unau

2017/08/29 05:24 編集

どういうディレクトリ構成になっているのか、http サーバはどのように起動しているのか (たとえば、「python -m http.server --cgi」とターミナルに打って起動している、とか)、ブラウザのアドレス欄には何を入力した(「http://localhost:8080/cgi-bin/kakugen.py」とか。「http://localhost----」とか変にぼかした書きかたではなく)、とか、全部、できるだけ具体的に書いてください。諸事情により具体的に書けない箇所は、隠すのはしかたありませんが、隠す範囲はできるだけ小さくして、その旨断わるようにしてください。
guest

回答2

0

私も同じテキストを使っています。
Windows環境ですが、1行目を
「#! /usr/bin/env python3」
のように、usrの前に「/」を入れると動作しましたよ。

投稿2019/11/24 23:07

genmai0141

総合スコア13

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

Apache を使わずに、ということですが、python のスクリプトに TCP のリスナを上げる記述もないし、どういうことなんだろうな、と思いましたが、次のリンク先の記事のように、CGIHTTPServer を使ってらっしゃるということなんでしょうか。

同じような現象への対処がこのリンク先記事に書かれておりますが、どうでしょう。

投稿2017/08/28 23:23

unau

総合スコア2468

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

unau

2017/08/29 05:26

たぶん関係ないと思うのですが、shebang がおかしいように思います。 「#!/usr/bin/env python3」の最初のスラが抜けているような。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問