我有一个我想从浏览器运行的 Python 脚本,似乎 mod_wsgi 是要走的路,但该方法感觉太重了,需要修改脚本以输出。我想我想要一种理想的 php 方法。这些脚本不接受任何输入,只能在内部网络上访问。
我在已经设置了 mod_wsgi 的 Linux 上运行 apache,这里有哪些选项?
您可以使用任何 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)
微框架的好处是它们抽象出编写标题等(但如果需要,仍应为您提供一个接口)
我会采用微框架方法以防万一您的需求发生变化-您永远不知道,它最终可能成为一个应用程序,而只是一个基本的转储......也许最简单的(和老式的方式!?)是使用 CGI:
print 'Content-Type: text/plain\n'
在任何其他输出之前包含sys.stdout
.py
已添加到 Apache CGI 处理程序但是 - 我不认为这将是一个了不起的优势(至少从长远来看)