1

ブラウザから実行したいPythonスクリプトがあります。mod_wsgiを使用する方法のようですが、メソッドの重みが大きすぎるため、出力用にスクリプトを変更する必要があります。理想的にはphpアプローチが欲しいと思います。スクリプトは入力を受け取らず、内部ネットワークでのみアクセスできます。

mod_wsgiがすでに設定されているLinuxでApacheを実行していますが、ここでのオプションは何ですか?

4

2 に答える 2

3

Pythonのマイクロフレームワークのいずれかを使用して、サーバーからスクリプトをすばやく実行できます。ほとんどの場合、独自の軽量サーバーが含まれています。

チェリーピーのホームページのドキュメントから

import cherrypy
class HelloWorld(object):
    def index(self):
        # run your script here
        return "Hello World!"
    index.exposed = True

cherrypy.quickstart(HelloWorld())

さらに、Pythonは、 HttpServerを使用して標準ライブラリで必要なことを実行するために必要なツールを提供します

BaseHttpServerを使用する基本的なサーバー:

import time
import BaseHTTPServer


HOST_NAME = 'example.net' # !!!REMEMBER TO CHANGE THIS!!!
PORT_NUMBER = 80 # Maybe set this to 9000.


class MyHandler(BaseHTTPServer.BaseHTTPRequestHandler):
    def do_HEAD(s):
        s.send_response(200)
        s.send_header("Content-type", "text/html")
        s.end_headers()
    def do_GET(s):
        """Respond to a GET request."""
        s.send_response(200)
        s.send_header("Content-type", "text/html")
        s.end_headers()
        s.wfile.write("<html><head><title>Title goes here.</title></head>")
        s.wfile.write("<body><p>This is a test.</p>")
        # If someone went to "http://something.somewhere.net/foo/bar/",
        # then s.path equals "/foo/bar/".
        s.wfile.write("<p>You accessed path: %s</p>" % s.path)
        s.wfile.write("</body></html>")

if __name__ == '__main__':
    server_class = BaseHTTPServer.HTTPServer
    httpd = server_class((HOST_NAME, PORT_NUMBER), MyHandler)
    print time.asctime(), "Server Starts - %s:%s" % (HOST_NAME, PORT_NUMBER)
    try:
        httpd.serve_forever()
    except KeyboardInterrupt:
        pass
    httpd.server_close()
    print time.asctime(), "Server Stops - %s:%s" % (HOST_NAME, PORT_NUMBER)

マイクロフレームワークの優れている点は、ヘッダーなどの書き込みを抽象化することです(ただし、必要に応じて、へのインターフェイスを提供する必要があります)

于 2012-12-12T13:56:13.780 に答える
3

要件が変更された場合に備えて、マイクロフレームワークのアプローチを採用します。これは、基本的なダンプではなくアプリになる可能性があります。おそらく最も単純な(そして昔ながらの方法です!?)CGIを使用しています。

  • スクリプトを複製し、print 'Content-Type: text/plain\n'他の出力の前に含めるsys.stdout
  • そのスクリプトをapache2がアクセスできる場所に配置します(たとえば、cgi-bin)
  • スクリプトが実行可能であることを確認してください
  • .pyApacheCGIハンドラーに追加されていることを確認してください

しかし-とにかく、これが素晴らしい利点になるとは思いません(少なくとも長期的には)

于 2012-12-12T14:30:45.137 に答える