python是单线程的,如果需要启动http.server再让脚本执行下载命令,python会直接卡主,因为http.server里httpd.serve_forever(),后面就不会执行了,需要用多线程来启动
import http.server
import socketserver
from threading import Thread, Event
import functools
def create_server(started_evt):
port = 8000
handler = functools.partial(http.server.SimpleHTTPRequestHandler, directory='./data')
httpd = socketserver.TCPServer(("127.0.0.1", port), handler)
print("serving at port:" + str(port))
started_evt.set()
httpd.serve_forever()
started_evt = Event()
th = Thread(target=create_server, daemon=True, args=(started_evt,))
th.start()
started_evt.wait()
用Thread启动服务器创建,在httpd.serve_forever()之前设置Event进行通知,避免服务器没启动就执行后面语句(最好再sleep一下)
设置 daemon=True 可以在脚本主进程完成后直接退出,不会等待其他线程.
这个需求是对应测试目标服务器有下载需求时,可以直接一键启动并执行测试命令



