2014-07-04 111 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 **模块?真的吗? –