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

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

ただいまの
回答率

88.37%

pythonのWebアプリのファイル読み込みに関してです

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 3,603

onceupon05

score 13

pythonを利用したWebアプリの開発を行いたいです。
そのために、このサイトを使用して、

Webサーバを起動→簡単なサイト(拡張子がhtmlではなくpy)を表示する、ということをしようとしておりました。

ソースは以下です。

#!/usr/bin/env python
html_body = """
<html><body>
foo = %s
</body></html>"""
import cgi
form=cgi.FieldStorage()    # (1)
print "Content-type: text/html¥n"
print html_body % foo      # (2)


この際、サイトが表示されると、
「foo = xxx」の部分のみが出力されるものと思われますが、
「#!/usr/bin/env python」から「print html_body % foo      # (2)」まで全てブラウザ上に出力されてしまいます。

おそらく、「#!/usr/bin/env python」の読み込みがおかしいのもしれないと考え、「/usr/bin/env」のパスを調べましたが、そのようなパスはありませんでした。
そういった場合、ここにはなんと記述する必要がありますでしょうか。

pythonのバージョンは

Python 3.4.1 :: Anaconda 2.1.0 (64-bit)


です。

回答お待ちしております。

【追記】

>>> import sys
>>> print(sys.path)
['', '/home/mluser/.pyenv/versions/anaconda3-2.1.0/lib/python34.zip', '/home/mluser/.pyenv/versions/anaconda3-2.1.0/lib/python3.4', '/home/mluser/.pyenv/versions/anaconda3-2.1.0/lib/python3.4/plat-linux', '/home/mluser/.pyenv/versions/anaconda3-2.1.0/lib/python3.4/lib-dynload', '/home/mluser/.pyenv/versions/anaconda3-2.1.0/lib/python3.4/site-packages', '/home/mluser/.pyenv/versions/anaconda3-2.1.0/lib/python3.4/site-packages/Sphinx-1.2.3-py3.4.egg', '/home/mluser/.pyenv/versions/anaconda3-2.1.0/lib/python3.4/site-packages/runipy-0.1.1-py3.4.egg', '/home/mluser/.pyenv/versions/anaconda3-2.1.0/lib/python3.4/site-packages/setuptools-5.8-py3.4.egg']

【追記2016/06/10 8:30】
querytest.pyアクセス時に出てくる画面

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • lightson

    2016/06/08 20:29

    利用しているOSとWebサーバを教えて下さい。

    キャンセル

  • onceupon05

    2016/06/08 20:46 編集

    OSはLinux mint(特に他のLinuxOSの違いはないかと。。。)を使用しております。
    Webサーバは、

    import http.server

    server_address = ("", 8000)
    handler_class = http.server.SimpleHTTPRequestHandler #ハンドラを設定
    simple_server = http.server.HTTPServer(server_address, handler_class)
    simple_server.serve_forever()

    を実行したものをWebサーバとしております。

    キャンセル

  • onceupon05

    2016/06/08 20:48

    Webサーバの部分のコードが開業されずに、見づらくなってしまいまして申し訳御座いません。

    キャンセル

回答 1

checkベストアンサー

+1

httpサーバが不適切です。
SimpleHTTPRequestHandlerができるのは、ファイルの内容をテキストとして返すことだけです。
http://docs.python.jp/3/library/http.server.html

class http.server.SimpleHTTPRequestHandler(request, client_address, server)(原文)
このクラスは、現在のディレクトリ以下にあるファイルを、HTTP リクエストにおけるディレクトリ構造に直接対応付けて提供します。

プログラムを動かした結果をwebサーバに渡して表示するには、GIHTTPRequestHandlerを使う必要があります。
onceupon05さんが参照しているサイトでもそのようになっています。
http://coreblog.org/ats/stuff/minpy_web/03/02.html

ただ、これを直したとしても、使っているのがAnacondaのpythonなので、その点を考慮しないとうまく動かないかもしれません。

題材にしているサイトは、2.7用に書かれたものなので、そのままでは動きません。改行も¥nと間違っていました。
少なくとも私ところでは、これで動きました。

#!/usr/bin/env python3
html_body = """
<html><body>
foo = %s
</body></html>"""
import cgi
form=cgi.FieldStorage()
foo = form["foo"].value
print("Content-type: text/html\n")
print(html_body % foo)

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/06/10 08:40

    おっしゃいます通り、List04 test.pyやList05 test.py(改)は動きました。

    querytest.pyにはhttp://127.0.0.1:8000/cgi-bin/querytest.py?foo=barという形でアクセスをしましたが、質問文に追加いたしました画像のようなものが出てきてしまいます。
    querytest.pyにはhttp://127.0.0.1:8000/cgi-bin/querytest.pyにアクセスした際も同じ画像のものが表示されました。

    http://127.0.0.1:8000/cgi-bin/query.py(誤ったファイル名)
    にアクセスをした際は、404になったので、正しいファイル名は指定できているものと思っております。


    キャンセル

  • 2016/06/11 22:23

    同じ環境で動作の確認をしました。このサイトはもとは2.7用に作られたものを 3用に直しているので間違いが有ります。他のサイトを参考にするか、bottleなどを使ったほうがいいかもしれません。
    http://symfoware.blog68.fc2.com/blog-entry-1068.html

    キャンセル

  • 2016/06/11 22:38

    もし、コピペでダメなら改行コードの問題の可能性がありますので、手打ちして確認してみてください。

    キャンセル

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

  • ただいまの回答率 88.37%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る