CentOSでPythonのWebプログラムを実行する方法

このQ&Aのポイント
  • CentOSでPythonのWebプログラムを実行するためには、実行可能なPythonのパスを指定する必要があります。
  • WindowsでPythonのWebプログラムを実行する際は、.exeファイルを探し、パスを指定する必要がありましたが、CentOSでは異なる方法を使います。
  • 具体的には、CentOSでPythonのWebプログラムを実行するためには、ファイルの先頭に「#! /usr/bin/python2.7」と記述する必要があります。また、実行権限が必要なため、ファイルに実行権限を与える必要もあります。
回答を見る
  • ベストアンサー

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の場合どのようなぱすを指定すれば良いのでしょうか?

  • Python
  • 回答数1
  • ありがとう数8

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.1

1行目以前に、ファイルの実行権限が無いので、実行権限を付けてください。 chmod ugo+x /var/www/html/index.py なお、1行目に何と書くかは、 type python と言うコマンドで調べます。 CentOSだとおそらく python is /usr/bin/python と表示されます。

suvera
質問者

お礼

ありがとうございます!! 完璧な回答でした! 実行権限を与えたところ思った通りの形になりました。 1行目に書くべきことの確認方法も教えていただけて本当に助かります。 本当にありがとうございました!

関連するQ&A

  • pythonのプログラムを走らせるには?

    使用するソフトウェアの関係でWeb(HTMLまたはPHP)とPythonの連携が必要になりました。 しかしPythonをWebで扱ったことがなくいまいちどうしたらいいのか分りません。 <form action="/python/pythontest.py" method="GET">  <input type="submit" name="submit" value="更新"> </form> といった形で呼び出しているのですがファイルが開かれるだけでptythonのプログラムが実行されません。 pythonのプログラムは #!/usr/bin/env python # coding: utf-8 import cgi from datetime import datetime html_body = u""" <html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"> </head> <body> %s </body> </html>""" content='' print "Content-type: text/html;charset=utf-8\n" print (html_body % content).encode('utf-8') と書いています。 何が原因なのでしょうか? /usr/bin/env python のパスがうまく通っていないからでしょうか?

    • ベストアンサー
    • HTML
  • 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スクリプト実行不可

    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は、正常に動作しているのですが。 アドバイスよろしくお願いします。

  • WebのPythonでの値の受け渡し

    現在PythonでWebサイトの作成を行っております。 自分のやり方の問題だとは思っているのですが文字列としてページAからページBに値を渡すことはできるのですが変数の状態で送ることができずに困っています。 現在のコードはこのように書いています。 >>> 渡す側 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> #! /usr/bin/env python # coding: utf-8 html_body= u""" <html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"> <title>タイトル</title> <link rel="stylesheet" href="../../css/library.css"> </head> <body> <h1>ヘッダー</h1> 数秒後に移動</br> <meta http-equiv="refresh" content="3;URL="index.py"?id={0}"> </body> </html>""" print "Content-type: text/html;charset=utf-8\n" print ( html_body.format([0,1,2,3]) ).encode('utf-8') この方法でid={0}の部分で値を渡しています。 しかし、その前に文字列になってしまっているため受け取り側での処理がいろいろと面倒だったり 渡す際にいろいろ処理をしてから渡さないとならず手間がかかります。 どのように改善すれば良いでしょうか?

    • ベストアンサー
    • HTML
  • 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を作る勉強をしています。 さて、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
  • cgi(perl)でパラメータが渡せない

    以下のプログラムでnum=9が伝わらないので、ミスをご指摘ください。 グラフィカルなアクセスカウンタを表示させようとしていますが うまくいかないのでテキストモードでデバッグしています。 [ /usr/local/apache2/htdocs/gif-view.html ] <html> <head> <meta http-equiv="Content-type:" content="text/html; charset=UTF-8"> <title>gif-view</title> </head> <body> <iframe src="/cgi-bin/gif-test.cgi?num=9"></iframe> <!-- <img src="/cgi-bin/gif-test.cgi?0" width=50 height=50> --> </body> </html> [ /usr/local/apache2/cgi-bin/gif-view.cgi ] permission は 755 にしています。 #!/usr/bin/perl print "Content-Type: text/plain;\n\n"; print "gif-test.cgi\n"; $prm0 = @ARGV[0]; if($prm0 = "") { print "Param is exist\n"; } else { print "Param is empty\n"; 実行結果として gif-test.cgi Param is empty となります。 httpd.conf で Script Alias /cgi-bin/ "/usr/local/apache2/cgi-bin/" を有効にしています。

    • ベストアンサー
    • Perl
  • pythonファイルの文字化け

    MAMPを通じて以下のpythonファイルをchromeで表示したのですが、日本語の部分が文字化けしてしまいます。 #!C:/MAMP/bin/python/bin/python #coding:utf-8 print "content-type: text/html" print "" print "こんにちは" 全面的に参考にしたudemyのサイトで解決法を質問したのですが、 「Chromeの言語判定が空振りしているようなので、 <html lang="ja"> とhtmlタグのlang属性を追加して再読み込みしてみてください。」 と言われました。 しかし、pyファイルのどこにこのhtmlタグを入れるのか理解できません。 chromeのデベロッパーツールでこのタグを追加しても変わりませんでした(そもそも根本的解決になっていません)。 どのようにして解決すれば良いのでしょうか。

  • 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 ------------------------------------------------------------------------------------------ 解決方法が分からないので教えていただけませんか?

  • Pythonのバージョンアップについて

    CentOS5.5にはPython2.4がデフォルトで入っているのですが、Python2.6でスクリプトを作成する必要がありバージョンアップをしているのですが、dbusモジュールのインポートができず行き詰っております。 具体的には、Python2.4とdbus-pythonがインストールされている状態で、下記のURLを参考にyumでPython2.6をインストールしました。 環境としては「/usr/bin/phthon2.4」と「/usr/bin/phthon2.6」が出来た状態です。 libは「「/usr/lib/phthon2.4」と「/usr/lib/phthon2.6」です。 dbus-pythonのインストール先は「/usr/lib64/python2.4/site-packages/dbus」になります。 Python2.4を環境で下記のインポートは問題ありません。 >>>import dbus しかし、Python2.6環境で同じコマンドを実行すると下記のようなエラーになります。 >>> import dbus Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: No module named dbus dbusの再インストールはリスクが高いと思い、モジュールのパスを通してみたところ下記のようなエラーになりました。 >>> import sys >>> sys.path.append('/usr/lib64/python2.4/site-packages') >>> import dbus Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/lib64/python2.4/site-packages/dbus/__init__.py", line 1, in <module> from _dbus import * File "/usr/lib64/python2.4/site-packages/dbus/_dbus.py", line 45, in <module> import dbus_bindings ImportError: /usr/lib64/python2.4/site-packages/dbus/dbus_bindings.so: undefined symbol: Py_InitModule4 rpmでモジュールインストール先の変更や、Python自体をソースからインストールなどしてみたのですが、全てうまく行かない状態です。 Pythonバージョンアップ前にインストールされているモジュールの使い方をご存知の方がおられましたら、宜しくお願いします。