如何从Python脚本中杀死SimpleHTTPServer?

jap*_*hyr 7 python simplehttpserver python-requests

我试图用来http.server测试Python项目中的所有链接.如果我在运行脚本之前启动服务器,我可以让我的脚本工作,然后当我关闭终端窗口时服务器停止.但我真的很喜欢脚本本身启动和停止服务器.

我制作了一个测试脚本,只需启动服务器,获取页面并证明服务器正在运行,然后停止服务器.我似乎无法得到服务器的pid.当我尝试在脚本运行后杀死此脚本报告的pid时,我收到一条消息,表明没有这样的进程; 但服务器仍在运行.

如何获取服务器的正确pid,或者更一般地说如何从脚本中停止服务器?

import os
import requests
from time import sleep

# Start server, in background.
print("Starting server...")
os.system('python -m http.server &')
# Make sure server has a chance to start before making request.
sleep(1)

print "Server pid: "
os.system('echo $$')

url = 'http://localhost:8000/index.html'
print("Testing request: ", url)
r = requests.get(url)
print("Status code: ", r.status_code)
Run Code Online (Sandbox Code Playgroud)

Use*_*ser 7

这是我在做的事情:

import threading

try: 
    from http.server import HTTPServer, SimpleHTTPRequestHandler # Python 3
except ImportError: 
    from SimpleHTTPServer import BaseHTTPServer
    HTTPServer = BaseHTTPServer.HTTPServer
    from SimpleHTTPServer import SimpleHTTPRequestHandler # Python 2

server = HTTPServer(('localhost', 0), SimpleHTTPRequestHandler)
thread = threading.Thread(target = server.serve_forever)
thread.daemon = True
thread.start()

def fin():
    server.shutdown()

print('server running on port {}'.format(server.server_port))

# here is your program
Run Code Online (Sandbox Code Playgroud)

如果您fin在程序中调用,则服务器将关闭.