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

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

ただいまの
回答率

88.13%

Python3にてcgiが実行されない

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 4,001

score 13

お世話になります。
Tatsuyaと申します。

只今"独習Python入門"という本を読みながら
プログラミングの勉強をしているのですが、
cgiを使用したプログラムを作成中に画面が真っ白になり。
思うように動作しない為ご相談させていただきました。。

コードの内容としては、pythonにてWebサーバーを作り、
そこのhtmlの入力フォームに入力されたものをPythonで反映するというものです。

環境はVirtualbox上のCentOS7をGnomeにて使用。
言語はPython3。

これまで、シバンをusr/local/Anaconda3/bin/python3に変更したり、
パーミッションを777に変えてみたり、改行コードをLR、LRCFに変えてみたりと試しましたが結果は変わらずでした。

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="utf-8">
    <title>はじめてのWebアプリケーション!</title>
    <style type="text/css">
    h1 {
        background:#eee;
        border:1px soloid #ccc;
        border-left:7px solid #e3297d;
        padding:15px 20px;
    }
    </style>
</head>
<body>
    <h1>あなたのお名前はなんというのですか?</h1>
    <form action="/cgi-bin/name.py" method="get">
    <p>お名前:<input type="text" name="name"/></p>
    <button type="submit">送信</button>
    </form>
</body>
</html> 
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import cgi


html_body = """
<html>
<body>
<p>あなたのお名前は<span style="font-size:48px"> %s </span>さんです!</p>
</body></html>
"""

form = cgi.FieldStorage()

print("Content-Type: text/html")
print(html_body % form["name"].value)
import http.server
http.server.test(HandlerClass=http.server.CGIHTTPRequestHandler)

お手数をおかけいたしますが、
ご教示いただけますと幸いです。

よろしくお願いいたします。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 2

checkベストアンサー

+2

はじめまして。私もPythonを(再)入門しているものです。

只今"独習Python入門"という本を読みながら 
プログラミングの勉強をしているのですが、 
cgiを使用したプログラムを作成中に画面が真っ白になり。 
思うように動作しない為ご相談させていただきました。。

おそらく今まさに本を片手にサンプルコードを試行錯誤されている最中だと思います。

さて動作させている環境、言語のバージョン、ソースコードなど示してくださりありがたいのですが、
残念ながら再現するための手順が書かれていないため、どのように動かないのか判断しかねます。

手元の環境で、以下のディレクトリ構成で試してみましたがソースコードに誤りは見受けられません。

.
├── cgi-bin
│   └── name.py
├── cgiserver.py
└── index.html

 再現手順

  • ゲストOS(※1)で上記の構成でディレクトリ、ファイルを配置し、
    ディレクトリ直下でpython cgiserver.pyを実行
  • ホストOS(※2)のブラウザよりゲストOSのIP, ポート番号を指定して画面を表示
  • 入力フォームより「名前」を入力し、「送信」ボタンを押下
  • 「あなたのお名前は "入力した名前" さんです!」と結果が表示されることを確認。

今一度、下記のようなことを確認し、試していただけますでしょうか?
解決の糸口になれば幸いです。

 (例)

  • HTML, Pythonソースコードの名前、ディレクトリ名称に誤りがないか?
  • ブラウザからアクセスしたとしたら、途中からURLに誤っていないか?
  • ターミナルにエラーメッセージが表示されていないか?
  • 実行している手順に誤りがないか?
  • そもそもVirtualbox上で動かしているはずのCentOS7にちゃんとアクセスできているか?
  • etc...

※1: ここではVirtualbox上にあるOSを指します。
※2: ここではVirtualboxにアクセスしている手元のOSを指します。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/03/07 19:01

    kashew_nuts様

    ご丁寧にご回答ありがとうございます!
    また、手順の記載とお返事が遅れ失礼いたしました。。

    ご指摘頂きました箇所を確認いたしましたが、改善がみられず、
    ターミナルのエラーメッセージを確認いたしましたところ、
    [Permission denied: access to /cgi-bin/name.py denied]
    と表示されていた為、一旦anybodyにてログインし、/から権限を確認しつつ変更を行い、
    anybodyでファイルを実行できるようにいたしましたが、改善されず途方に暮れていると
    python -m http.server --cgi
    にてサーバーを起動できるとのことで試してみるとすんなりアクセスできました。

    根本的な解決とはなっておりませんが、
    一旦コードの挙動を確認できたので、良しとしようと思います。。

    コードが動かずとても悩んでいたので、
    親身にご回答いただけて大変うれしかったです!
    また機会がございましたらよろしくお願いいたします。

    キャンセル

  • 2017/03/07 19:07

    直接の解決とはならなかったようですが、動作してよかったです:D

    ソースコード自体に問題がなくても他の原因で動かないこともあるから難しいですよね…

    もしよろしければ質問を「受付中」→「解決済み」にして、ベストアンサーも選んでいただけるとまた他につまずいた方がいらしたとき解決の糸口となるかと思いますのでよろしくお願いします。

    キャンセル

  • 2017/03/07 19:39

    そうですね。。
    学習を進める程勉強不足が露呈していっております…笑

    なにからなにまですみません^^;
    「解決済み」となったかと思います!

    ありがとうございました!

    キャンセル

  • 2017/03/07 20:40

    こちらこそ。ベストアンサーに選んでいただいてありがとうございます!

    キャンセル

0

>#!/usr/bin/env python

これ、python の前に何でスペース入ってるんですか?
また python はその位置にインストールされていますか?

追記

失礼しました。こういう書き方があるのを寡聞にして知りませんでした。勉強になりました。

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/03/07 19:09

    Zuishin様
    ご回答ありがとうございました!

    #! /usr/bin/python
    こういった書き方もあるんですね!

    こちらこそ勉強になりました!
    ありがとうございます!

    キャンセル

  • 2017/03/07 19:31

    私にベストアンサーがついてますが、間違っていませんか?

    キャンセル

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

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

関連した質問

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