2012-12-12 108 views
1

我有一個Python腳本,我想從瀏覽器中運行,它似乎是的mod_wsgi的路要走,但該方法感覺太重量級的,需要修改腳本爲輸出。我想我想要一個理想的PHP方法。這些腳本不會接受任何輸入,只能在內部網絡上訪問。網絡服務器服務於Python腳本

我在Linux上運行的Apache與已經設立的mod_wsgi,這裏有什麼選擇呢?

+0

什麼輸出;是否可以使用模板來生成HTML結構並填充元素? –

+0

我應該更清楚它只是純文本,該腳本只是'輸出'stdout'我只是一個快速簡單的方式來顯示通過瀏覽器的輸出。 –

回答

3

我會去微架構的方法,以防萬一你的要求改變 - 你永遠不知道,它可能最終被一個應用程序,而只是一個基本的轉儲...也許最簡單的(和老式的方式!?)是使用CGI:

  • 任何其它輸出sys.stdout
  • 之前複製你的腳本,包括print 'Content-Type: text/plain\n'把該腳本某處的Apache2可以訪問它(例如你的cgi-bin)
  • 確保腳本是可執行
  • 確保.py被添加到Apache的CGI處理程序

可是 - 我不認爲反正這將是一個夢幻般的優勢(從長遠來看,至少)

+0

它確實需要短期傾倒,所以這是完美的。 –

+0

@sudo_O我應該注意它雖然沒有測試...但在理論上應該工作(或者至少足夠讓你找到工作的configs /例) –

+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) 

微框架的好處是它們是抽象的滿分作文標題等(但仍應爲您提供一個接口,如果需要的話)