fad*_*lm0 3 python python-2.7 server
我正在尝试启动一个简单的 HTTP 服务器,然后在默认浏览器中打开它。我不知道我做错了什么,要么根本没有启动服务器,要么在脚本结束时立即停止(它不应该永远运行吗?)。
import BaseHTTPServer, SimpleHTTPServer, webbrowser, thread
def start_server():
httpd = BaseHTTPServer.HTTPServer(('127.0.0.1', 3600), SimpleHTTPServer.SimpleHTTPRequestHandler)
httpd.serve_forever()
thread.start_new_thread(start_server,())
url = 'http://127.0.0.1:3600'
webbrowser.open_new(url)
Run Code Online (Sandbox Code Playgroud)
这是 @eyllanesc 使用较新的http.server和线程模块的 Python 3 版本答案
import sys
import time
import threading
import webbrowser
from http.server import HTTPServer, SimpleHTTPRequestHandler
ip = "127.0.0.1"
port = 3600
url = f"http://{ip}:{port}"
def start_server():
server_address = (ip, port)
httpd = HTTPServer(server_address, SimpleHTTPRequestHandler)
httpd.serve_forever()
threading.Thread(target=start_server).start()
webbrowser.open_new(url)
while True:
try:
time.sleep(1)
except KeyboardInterrupt:
sys.exit(0)
Run Code Online (Sandbox Code Playgroud)
只要应用程序继续运行,线程就会一直存在,在webbrowser.open_new()没有阻塞的情况下浏览器几乎无法完成应用程序的运行,您应该做的是做一个阻止程序来阻止应用程序完成执行:
import sys
import thread
import webbrowser
import time
import BaseHTTPServer, SimpleHTTPServer
def start_server():
httpd = BaseHTTPServer.HTTPServer(('127.0.0.1', 3600), SimpleHTTPServer.SimpleHTTPRequestHandler)
httpd.serve_forever()
thread.start_new_thread(start_server,())
url = 'http://127.0.0.1:3600'
webbrowser.open_new(url)
while True:
try:
time.sleep(1)
except KeyboardInterrupt:
sys.exit(0)
Run Code Online (Sandbox Code Playgroud)