2014-07-04 148 views
3

目前我和其他許多人在多個平臺(Windows,OS X和潛在的Linux)上使用Python HTTP服務器。我們使用Python HTTP服務器來測試JavaScript遊戲。Python在代碼中啓動HTTP服務器(創建.py啓動HTTP服務器)

現在我們通過每個平臺(CMD,終端等)上的命令行啓動Python HTTP服務器。雖然這很好,但使用這種方法會變得很痛苦,但最好有一個簡單的腳本來啓動Python HTTP服務器。

該腳本需要在所有平臺上工作,如果所有平臺都安裝了Python,則可以使用Python編寫腳本。

目前我們使用以下命令來啓動服務器:

關於Python 3

python -m http.server 

Python的2

python -m SimpleHTTPServer 

我怎麼會放一個這些行代碼可以保存爲.py,只需雙擊即可開始他是HTTP服務器?

回答

5

下面的腳本將用於任一的Python 2或3做同樣的:

try: 
    # Python 2 
    from SimpleHTTPServer import test 
except ImportError: 
    # Python 3 
    from http.server import test 

test() 

這將運行在運行從與-m開關的命令行的模塊所使用的exact same callable

Python 3的版本includes command-line support確定綁定到什麼接口和端口,但是您的命令行並沒有使用這個。

+0

+1酷的感謝! – alfasin

+0

啊哈!非常感謝你! 這正是我正在尋找的:) – ducsuus

0

要給出一個更一般的回答,您可以通過subprocess模塊調用任何外部命令:

from platform import python_version 
from subprocess import call 
if (int(python_version()[0]) < 3) : 
    call(["python", "-m", "SimpleHTTPServer"]) 
else : 
    call(["python", "-m", "http.server"]) 
+0

好的,我會在將來記住這一點。 這是否允許調用任何控制檯命令,或只調用一組Python範圍的模塊(如果有的話,我可以在哪裏找到列表?)。 – ducsuus

+0

這相當於在系統終端中輸入字符串文字。 'subprocess'代替舊的模塊(例如'os')。這裏解釋'call'的一個變體: http://stackoverflow.com/a/7681815/3799591 對於運行基本的HTTP服務器,'call'比'Popen'好(Ctrl-C停止服務器)。 安裝多個版本的Python允許運行「python3 script.py」並調用「python -m http.server」,這會中斷(「python」通常默認爲2),但只要你使用「python」來源,很好。從這個意義上說,接受的答案是更好的。我從shell腳本POV中提出了這個問題。 – bcoka

+1

您正在從**一個Python腳本產生一個子進程**來執行** Python **模塊?真的嗎? –