启动http web服务器然后打开浏览器

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)

Dyl*_*ogg 7

这是 @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)


eyl*_*esc 5

只要应用程序继续运行,线程就会一直存在,在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)