我有一个我希望从浏览器运行的Python脚本,似乎mod_wsgi是要走的路,但该方法感觉太重,需要修改输出的脚本。我想我想要一个理想的PHP方法。脚本不接受任何输入,只能在内部网络上访问。
我在Linux上运行apache已经设置了mod_wsgi,这里有哪些选项?
答案 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
.py
添加到Apache CGI处理程序但是 - 我不认为这将是一个奇妙的优势(至少从长远来看)