• 締切済み

Pythonを用いてCGIを作る勉強をしています。

Pythonを用いてCGIを作る勉強をしています。 さて、CGIHTTPServerでCGIのテストをしようとしたところ、ぜんぜん動いてくれません。ちゃんとファイルのパーミッションも755にしました。 自分の力だけではどうにもならなかったため、ここで質問させてもらいます。 どうしたらよいのでしょうか。 僕がつくったPythonのソース test.pyは #! /usr/bin python print "Content-type: text/html\n" print "<html><body>Hello!</body></html>" です。 本来ならブラウザで「http://127.0.0.1:8000/cgi-bin/test.py」 とすれば動いてくれるはずなのに以下のようなエラーメッセージが出ます。 localhost - - [19/May/2010 23:46:43] "GET /cgi-bin/test3.py HTTP/1.1" 200 - Traceback (most recent call last): File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/CGIHTTPServer.py", line 255, in run_cgi OSError: [Errno 13] Permission denied localhost - - [19/May/2010 23:46:43] CGI script exit status 0x7f00 PCの環境はMacOSX10.6です。 だれか分かる方。教えていただけないでしょうか?? よろしくお願いします。

  • CGI
  • 回答数2
  • ありがとう数22

みんなの回答

  • seastar3
  • ベストアンサー率69% (99/142)
回答No.2

基本的にhttpサービスが作動していないのではないでしょうか。 MacOSのファイアーウォールか、ApacheなどのWebサーバの設定を確かめて、 index.htmlの表示から再確認したらどうでしょうか。

  • seastar3
  • ベストアンサー率69% (99/142)
回答No.1

まず、ヘッダ情報の出力の末尾は改行が2回必要です。したがって、 print "Content-type: text/html\n"  は、 print "Content-type: text/html\n\n" が正しいのです。 また、エラーメッセージに出ているtest3.py は正常に動作したのでしょうか? 1本でも動作したことがあるとしたら、フォルダのパーミッションや :8000 のポート指定の間違いはないということです。 逆にまだ動いたことがないとしたら、フォルダのパーミッションや ポート指定の変更などの対応が考えられます。ポート指定は、無指定か、:80 :8080 などが候補でしょう。 また、当然、CGIHTTPServer.py のパーミッションもpythonフォルダのパーミッションも確認した方がよいでしょう。

tkmoog
質問者

お礼

回答ありがとうございます。 じつはどのファイルも正常に動作してないです。 指摘していただいたことはすべてやってみたんですが、Firefoxで開こうとすると、cgiが実行されずにファイルのダウンロードが開いてしまいます。 Safariでも同じでした。どうすればいいのでしょうか。。。

関連するQ&A

  • MAMPでpythonを実行させたい

    OSX10.8を使っています http://www.python.jp/Zope/download/pythoncore python-2.7.3-macosx10.6.dmg(32bit/64bit両用) これをインストールしました 以下の記述を test.pyとして保存し #!/usr/bin/env python print "Content-type: text/html\n" print "<html><body>Python is awesome !</body></html>" MAMPを起動しtest.pyを表示させると #!/usr/bin/env python print "Content-type: text/html\n" print "<html><body>Python is awesome !</body></html>" がそのままブラウザに表示されます application/mamp/conf/apache/httpd.confを開いて #AddHandler cgi-script .cgiのコメントを外し AddHandler cgi-script .cgi .py としapacheを再起動させtest.pyを表示させると インターナルサーバーエラーになりました 何をやり残しているのか、解決方法、または参考になるページを教えて下さい よろしくお願いします

  • pythonのCGIでページを遷移したい

    PythonのCGIserverを使っています。 /cgi-bin/hoge.py から /cgi-bin/foo.py へとページを遷移させたいのですが、うまくいきません。 どうすればいいですか? 以下、hoge.pyのソースです。 #!/usr/local/bin/python # coding: utf-8 (中略) print "Location: /cgi-bin/foo.py\n\n" 他の方法として、 import foo として、fooの関数やメソッドを呼ぶことも考えたのですが、 これもうまくいきません。。

    • 締切済み
    • CGI
  • pythonでのCGI作成

    python で cgiを作成しているのですが、 if f.getfirst('btn1'):  ### 外部スクリプト起動 ###  os.system("python /var/www/cgi-bin/test.py") のように、このボタンが押されたら外部スクリプト起動のようにしたいのですが、どうすればいいでしょうか? たとえば、os.system("mkdir test")のようにすれば、上手くいくのですが、python ~やperl ~のようにすると上手くいきません・・・ (もしかするとapacheの設定か何か必要なのでしょうか?) 初心者丸出しの質問かもしれませんが、よろしくお願いします

    • 締切済み
    • CGI
  • gnuplot.py について

    目的:pythonで数値計算した結果をgnuplotで出力したい。 要点:Gnuplot を import できてもグラフを表示できない。 OS : Mac OS X 10.5 まず、SorceForge から ・numerical python (numpy-1.5.1-py2.7-python.org-macosx10.3) ・gnuplot.py (gnuplot-py-1.8.tar) をダウンロードしました。 次にterminalで上のそれぞれのファイルがあるディレクトリにいって、 >> python setup.py install としました。どうやら成功した模様です。 numpy と Gnuplot というフォルダが /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/ というディレクトリにできています。 そして、IDLE の python shell で >>> import numpy >>> import Gnuplot としました。無事完了します。ここまではOKです。 しかし、試しに python shell から gnuplot で表示してみようとすると、IOError: [Errno 32] Broken pipe というエラーを表示します。たとえば、上に書いたディレクトリのGnuplot というフォルダの中に、test.py というスクリプトがあって、IDLE で開いて実行すると、次のような表示が出ます: This program exercises many of the features of Gnuplot.py. The commands that are actually sent to gnuplot are printed for your enjoyment. Popping up a blank gnuplot window on your screen. Press return to show results... Traceback (most recent call last): File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Gnuplot/demo.py", line 110, in <module> demo() File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Gnuplot/demo.py", line 28, in demo g = Gnuplot.Gnuplot(debug=1) File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Gnuplot/_Gnuplot.py", line 187, in __init__ self('set terminal %s' % (gp.GnuplotOpts.default_term,)) File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Gnuplot/_Gnuplot.py", line 210, in __call__ self.gnuplot(s) File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/Gnuplot/gp_macosx.py", line 144, in __call__ self.flush() IOError: [Errno 32] Broken pipe 他のスクリプトを実行してみると、次の4つを除き正常に実行されます; _init.py, demo.py, test.py, gp_mac.py ただし、gp_mac.py だけは IOError: [Errno 32] Broken pipe ではなく、 ImportError: No module named Required_Suite というエラーです。 何が原因でしょうか?これを解決するにはどうしたらよいのでしょうか?

  • CGI

    cgiの勉強をしているのですがシバンの設定で困っています。 ①実行パス(絶対パス) /virtual/アカウント名(もしくはID)/usr/local/bin/python3 と書いてありました。 https://www.value-server.com/spec/ 実際ドメイン直下のディレクトリは動いています。 しかし ドメイン/pro/sample.py は動いてくれません。500エラーです。パーミッションは755にしています。 ②pythonで実行したcgiは print("<html>") print("<head>") print("<title>Hello world !</title>")… こんな感じでprintの嵐なのですが、 使い方はあっているのでしょうか?

    • ベストアンサー
    • CGI
  • Python feedparserのパースエラー回避方法について

    feedparserを使い始めました。 ココログで削除されてしまっているあるいは存在しないブログのRSSフィードを読み込もうとすると下記のエラーが出てしまいます。 以下のページをパースしてしまっているように思われますが確認できていません。 http://www.cocolog-nifty.com/error/403 たとえば、Yahooブログで同様のことをしてもエラーはでませんでした。 このエラーの原因及び回避方法をご存知でしたら教えてください。 import feedparser d = feedparser.parse('http://xxx.cocolog-nifty.com/xxx/atom.xml') Traceback (most recent call last): File "<stdin>", line 1, in <module> File "feedparser.py", line 2623, in parse feedparser.feed(data) File "feedparser.py", line 1441, in feed sgmllib.SGMLParser.feed(self, data) File "/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/sgmllib.py", line 99, in feed self.goahead(0) File "/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/sgmllib.py", line 138, in goahead k = self.parse_endtag(i) File "/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/sgmllib.py", line 315, in parse_endtag self.finish_endtag(tag) File "/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/sgmllib.py", line 355, in finish_endtag self.unknown_endtag(tag) File "feedparser.py", line 476, in unknown_endtag method() File "feedparser.py", line 1318, in _end_content value = self.popContent('content') File "feedparser.py", line 700, in popContent value = self.pop(tag) File "feedparser.py", line 641, in pop output = _resolveRelativeURIs(output, self.baseuri, self.encoding) File "feedparser.py", line 1594, in _resolveRelativeURIs p.feed(htmlSource) File "feedparser.py", line 1441, in feed sgmllib.SGMLParser.feed(self, data) File "/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/sgmllib.py", line 99, in feed self.goahead(0) File "/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/sgmllib.py", line 133, in goahead k = self.parse_starttag(i) File "/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/sgmllib.py", line 291, in parse_starttag self.finish_starttag(tag, attrs) File "/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/sgmllib.py", line 333, in finish_starttag self.unknown_starttag(tag, attrs) File "feedparser.py", line 1589, in unknown_starttag _BaseHTMLProcessor.unknown_starttag(self, tag, attrs) File "feedparser.py", line 1458, in unknown_starttag value = unicode(value, self.encoding) LookupError: unknown encoding: 環境は、Mac OS 10.5.4、Python 2.5.1、feedparser 4.1 レンタルサーバのXREAでも試しましたが同様のエラーが出ました。 XREAのPythonは2.4です。 よろしくお願いします。

  • Pythonを使ったwebアプリについて

    開発環境はUbuntu12.04 Python2.7を使用しています 初歩的な質問ですが、 webサーバを作るときに simpleserver.py --------------------------------- import SimpleHTTPServer SimpleHTTPServer.test() --------------------------------- index.html -------------------------------------- <html> <head> </head> <body> <h1>Hello! Python!</h1> </body> </html> -------------------------------------- この2つを同ディレクトリに置いて $ python simpleserver.py と入力したところ、下のようなトレースバックが表示されました ------------------------------------------------------------------------------------------ Traceback (most recent call last): File "simpleserver.py", line 2, in <module> SimpleHTTPServer.test() File "/usr/lib/python2.7/SimpleHTTPServer.py", line 216, in test BaseHTTPServer.test(HandlerClass, ServerClass) File "/usr/lib/python2.7/BaseHTTPServer.py", line 595, in test httpd = ServerClass(server_address, HandlerClass) File "/usr/lib/python2.7/SocketServer.py", line 408, in __init__ self.server_bind() File "/usr/lib/python2.7/BaseHTTPServer.py", line 108, in server_bind SocketServer.TCPServer.server_bind(self) File "/usr/lib/python2.7/SocketServer.py", line 419, in server_bind self.socket.bind(self.server_address) File "/usr/lib/python2.7/socket.py", line 224, in meth return getattr(self._sock,name)(*args) socket.error: [Errno 98] Address already in use ------------------------------------------------------------------------------------------ 解決方法が分からないので教えていただけませんか?

  • numpy 動作確認エラーについて

    numpyの動作確認を行ったのですがエラーが出力されましたので、 対応策を教えて下さい。 >>> import numpy >>> numpy.test() Running unit tests for numpy Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/numpy/testing/nosetester.py", line 340, in test self._show_system_info() File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/numpy/testing/nosetester.py", line 193, in _show_system_info nose = import_nose() File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/numpy/testing/nosetester.py", line 71, in import_nose raise ImportError(msg) ImportError: Need nose >= 0.10.0 for tests - see http://somethingaboutorange.com/mrl/projects/nose よろしくお願い致します。

  • pythonスクリプト実行不可

    pythonスクリプトをCGIとして動作させるとエラーになります。 環境は、 OS : CentOS 6.4 Python : 2.6.6 pythonソースは、 #!/usr/bin/python # coding: utf-8 print "Content-type: text/html; charset=UTF-8" print print ブラウザーから、このCGIを直接起動すると、/var/log/httpd/error_logに下記のエラーが出ます。 [Fri Oct 18 12:45:28 2013] [error] [client 10.1.34.89] (8)Exec format error: exec of '/home/httpd/cgi-bin/test.py' failed Exec format errorとは、何でしょうか? perl CGIは、正常に動作しているのですが。 アドバイスよろしくお願いします。

  • centos python

    以前WindowsでPythonのWebプログラムを書いていました。 webサーバーはapacheを利用しています。 そちらをcentOS(apache)に持って行きたいです。 ↓↓↓↓こちらがwindowsでのスクリプトです #! C:/Python27/python # coding: utf-8 temple_body= u""" <html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"> <title>Pythonタイトル</title> </head> <body> <h1>Python テンプレート</h1> テンプレートです</br> </body> </html>""" try: print "Content-type: text/html;charset=utf-8\n" print ( temple_body.format() ).encode('utf-8') except Exception as e: print e ただテンプレートと表示されるだけのものです。 この1行目の #! C:/Python27/python を #! /usr/bin/python2.7 と直したところ サイトは開けず 500 Internal Server Error が、 エラーログには以下のようなものが出ていました。 End of script output before headers: index.py AH01215: (13)Permission denied: exec of '/var/www/html/index.py' failed #! /usr/bin/python2.7の部分が問題だと思うのですが どのように直せばいいのかがわかりません。 windowsの時は.exeを探し、Pathを指定しました。 しかし、centosでpython.exeに相当するものがどこにあるのか分りません。 centosの場合どのようなぱすを指定すれば良いのでしょうか?