Web服务器用于提供Python脚本

时间:2012-12-12 13:46:49

标签: python apache mod-wsgi

我有一个我希望从浏览器运行的Python脚本,似乎mod_wsgi是要走的路,但该方法感觉太重,需要修改输出的脚本。我想我想要一个理想的PHP方法。脚本不接受任何输入,只能在内部网络上访问。

我在Linux上运行apache已经设置了mod_wsgi,这里有哪些选项?

2 个答案:

答案 0 :(得分:3)

您可以使用任何python的微框架从服务器快速运行脚本。大多数都包含自己的轻量级服

来自cherrypy主页文档

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)

微框架有什么好处,它们抽象出书写标题等(但如果需要,仍然应该为你提供一个界面)

答案 1 :(得分:3)

我会采用微框架方法,以防你的需求发生变化 - 你永远不会知道,它可能最终成为一个应用而不仅仅是一个基本的转储...也许最简单的(和老式的方式!?)是使用CGI:

  • 复制您的脚本并在print 'Content-Type: text/plain\n'
  • 的任何其他输出之前添加sys.stdout
  • 将该脚本放在某处apache2可以访问它(例如你的cgi-bin)
  • 确保脚本可执行
  • 确保将.py添加到Apache CGI处理程序

但是 - 我不认为这将是一个奇妙的优势(至少从长远来看)