Python 中如何在代码中启动 HTTP 服务器(创建 .py 启动 HTTP 服务器)
目前我和很多人都在不同的平台上使用Python HTTP服务器(比如Windows、OS X,还有可能是Linux)。我们用这个服务器来测试一个JavaScript游戏。
现在我们是在每个平台的命令行(CMD、终端等)上启动Python HTTP服务器。虽然这样可以正常工作,但用这种方法越来越麻烦了。如果能有一个简单的脚本来启动Python HTTP服务器就好了。
这个脚本需要在所有平台上都能用,因为所有平台上都会安装Python,所以用Python来写这个脚本是个不错的主意。
目前我们用以下命令来启动服务器:
在Python 3上
python -m http.server
在Python 2上
python -m SimpleHTTPServer
我该如何把这些命令写成Python代码,然后保存为一个.py文件,双击就能启动HTTP服务器呢?
5 个回答
0
这是一个简化版的代码,它还可以从网址中提取值:
from http.server import HTTPServer, BaseHTTPRequestHandler
from urllib.parse import urlparse, parse_qs
class MyHandler(BaseHTTPRequestHandler):
def do_GET(self):
url_parts = urlparse(self.path)
query_params = parse_qs(url_parts.query)
param1 = query_params.get('param1', [''])[0]
param2 = query_params.get('param2', [''])[0]
print(f"param1: {param1}")
print(f"param2: {param2}")
self.server.shutdown()
def run_server():
server_address = ('', 8000)
httpd = HTTPServer(server_address, MyHandler)
httpd.serve_forever()
run_server()
0
创建一个文件 server.py
,里面写入以下内容:
import sys
port=sys.argv[1]
if sys.version_info < (3, 0):
from SimpleHTTPServer import SimpleHTTPRequestHandler
from BaseHTTPServer import HTTPServer
else:
from http.server import HTTPServer, SimpleHTTPRequestHandler
httpd = HTTPServer(("127.0.0.1", int(port)), SimpleHTTPRequestHandler)
print("Serving HTTP on localhost port " + port + " (http://localhost:" + port + "/) ...")
httpd.serve_forever()
使用方法:
python server.py 8887
1
为了给出一个更通用的回答,你可以通过 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"])
16
这个被认可的答案对我没用。如果你也遇到同样的问题,可以试试这个。
from http.server import HTTPServer, SimpleHTTPRequestHandler
httpd = HTTPServer(('localhost', 8000), SimpleHTTPRequestHandler)
httpd.serve_forever()
10
下面的脚本可以在Python 2和Python 3中都能运行,效果是一样的:
try:
# Python 2
from SimpleHTTPServer import test, SimpleHTTPRequestHandler
except ImportError:
# Python 3
from http.server import test, SimpleHTTPRequestHandler
test(SimpleHTTPRequestHandler)
这个脚本运行的是一个和你在命令行中用-m
选项运行模块时完全相同的功能。
Python 3的版本支持命令行参数,可以用来决定要绑定哪个接口和端口,但你的命令行其实并没有用到这些功能。