web-dev-qa-db-ja.com

実行する代わりにブラウザでコードを表示する.pyファイル

Pythonを使い始めようとしていますが、ローカルホスト用にサーバーを正しくセットアップできません(Amppsを使用)。Pythonは正常に実行されていますIDLEとコマンドラインですが、ブラウザでファイルを開くと、コードが表示されて実行されません。

私はこれに従いました http://www.imladris.com/Scripts/PythonForWindows.html cgiをセットアップするためのチュートリアルですが、機能していません。

これが私の「helloworld」プログラムのコードです。

#!/usr/bin/env python
# -*#!/usr/bin/python

print "Content-type:text/html\r\n\r\n"
print '<html>'
print '<head>'
print '<title>Hello Word - First CGI Program</title>'
print '</head>'
print '<body>'
print '<h2>Hello Word! This is my first CGI program</h2>'
print '</body>'
print '</html>'

助言がありますか?

13
user1104854

Webサーバーは、pythonコードを実行可能ファイルではなく静的ファイルとして扱っています。ここでの目標は、Apacheにpythonを実行させ、stdoutをユーザーのブラウザーに送り返すことです。

私はAmppsに精通していませんが、このセットアップを取得するための基本的なApacheフローは次のようなものです。

  1. Httpd.confのOptions行を編集して、ExecCGIを含めます
  2. 次の行を追加して、pythonファイルをcgiハンドラーとしてhttpd.confに登録します。
    AddHandler .py
  3. Apacheを再起動します
  4. Shebang行(一番上の#!/ usr/bin/env pythonビット)が実際にpythonへのパスを指していることを確認してください実行可能ファイル。C:上にあるpython2.6の場合、次のようになります。
    #!\Python26\python
  5. スクリプトを移植可能にする必要がある場合は、Shebang行を変更する代わりに、行ScriptInterpreterSource registryをhttpd.confに追加し、WindowsがデフォルトでPython.exeで* .pyファイルを開くようにします。これは、スクリプトをダブルクリックすることでテストできます。実行されない場合は、右クリックして[開く]、[その他]の順に選択し、python.exeを参照します。 [常にこのプログラムを使用してこのタイプのファイルを開く]チェックボックスをオンにしてください。これに関するマイクロソフトサポート技術情報の記事があります ここ

最後に、mod_wsgiまたはFastCGIは、Apacheにpythonを実行させるための推奨される方法であり、トラフィックの少ないサイト(1日あたり数万のリクエスト)を優先します。また、web.py(非常に軽量)やDjango(より重いですが、ユーザー入力を収集したりデータベースとやり取りしたりする場合は時間を大幅に節約できます)などのWebフレームワークを調べることをお勧めします。

6
Ben Burns

与えられたソリューションは、Raspberry Pi 3 B +で機能しました。

1)編集してみてください:Sudo nano /etc/Apache2/sites-enabled/000-default.conf

2)このファイル内に以下のコードを追加します。

    <Directory /var/www/html>
            Options +ExecCGI
            AddHandler cgi-script .py
            # DirectoryIndex index.py
    </Directory>

3)Apache2を再起動します:SudoサービスApache2を再起動します

4)コードに上記の数行を追加するだけです。

#!/usr/bin/env python3
import cgitb
cgitb.enable()
print("Content-Type:text/html;charset=utf-8")
print()
print("Hello world")

5)コードは機能するはずです;)

0