2013-10-18 306 views
1

這個學期我正在做一個python類,我想用網頁的形式向我的程序添加圖形用戶界面。部分我不能爲學習Tkinter而困擾,部分我只是在挑戰自己,部分我只是喜歡用HTML/JS編寫接口。執行python腳本的python服務器

我知道關於使用SimpleHTTPServer創建HTTP服務器的基礎知識,但是我需要的是一種讓我的網頁能夠將ajax命令發送到服務器上的python腳本的方式,然後它將執行服務器端,然後接收腳本輸出。有點像Sage如何做。

如何爲SimpleHTTPServer創建一個擴展,然後可以使用它來提供python腳本的輸出?我需要一個非常通用的解決方案,以便在編寫任何python腳本時,我可以輕鬆地將其包裝在某種界面中,將其放入服務器的文件夾中,而無需執行其他任何操作,只需使用AJAX調用它即可服務器將處理剩下的事情。

我目前的想法是有一個ServerSideScript類,我的腳本可以擴展,使用一個稱爲output的函數。我擁有的每個腳本都應該包含一個名爲Script的ServerSideScript的子類。當服務器被要求以服務,例如,foo.py,它注意到了延伸和不一樣的東西:

if self.path[-3:]: == ".py": 
    return getScriptOutput(self.path) 

... 

def getScriptOutput(self, path): 
    from path import Script # obviously not going to work, since path is a string 
    return Script().output() 

這不能爲工作原因在評論中指出,我知道諸如import_module函數之類的東西,但是導入看起來像是一種難看的方式,以此開始。

建議是什麼?

+1

你見過[CGIHTTPServer](http://docs.python.org/2/library/cgihttpserver.html)嗎? –

+0

@MartijnPieters這是默認的,對吧?我無法在學校電腦上安裝額外的模塊。 –

+0

爲什麼不使用合適的網絡服務器和像Flask這樣的微型框架? –

回答

3

Python隨機附送電池; CGIHTTPServer將運行使用CGI標準Python腳本:

CGIHTTPServer模塊定義了一個請求處理程序類,接口兼容BaseHTTPServer.BaseHTTPRequestHandler和從SimpleHTTPServer.SimpleHTTPRequestHandler繼承的行爲,但也可以運行CGI腳本。

,只要他們有一個.py.pyw擴展,並且是可執行程序,它會運行Python腳本;映射到文件的其他路徑將被視爲常規文件,並將其內容用於替代。

您可能感興趣的cgicgitb模塊爲好,以幫助緩解CGI腳本開發。

+0

[CGIHTTPServer tutorial](http://pointlessprogramming.wordpress.com/2011/02/13/python-cgi-tutorial-1/)。 –

0

你可能想看看IPython notebooks - 它本質上給你一個基於Web的交互式Python外殼,甚至與matplotlib等,您可以節省Python腳本爲筆記本電腦集成,添加文字插圖中陳述等

enter image description here

如果您想共享輸出而不是交互,您也可以使用nbviewer

+0

我這樣做是爲了編碼它的樂趣,而不是爲了實際價值。但是,謝謝。 –