python-3.x - 我正在尝试在 python 脚本中创建 HTTP 服务器,但我无法通过脚本关闭服务器
问题描述
python 版本 3.9.4 基本上,我试图启动一个 HTTP 服务器并在事件发生时关闭它。(我正在创建一个 gui 应用程序,当您单击一个按钮以查看一个文件时,它会启动一个基本的 HTTP 服务器;非常简单)。当您关闭应用程序(通过关闭窗口的事件)时,服务器会关闭。我已经尝试使用终止和 sys.exit 进行线程和多处理,但到目前为止还没有一个工作。我目前正在尝试子处理模块使用命令启动服务器。自从我尝试了 http.server 模块以来,我愿意接受任何有关启动 HTTP 服务器的更好方法的建议,但我也无法停止该服务器。这是一个基本测试,我以后可以将它集成到我的更大的应用程序中。
import subprocess
import webbrowser
import sys
import threading
import time
def startServ():
proc = subprocess.run(['python', '-m', 'http.server'])
t1 = threading.Thread(target = startServ)
def main():
print("starting server")
t1.start()
time.sleep(2)
webbrowser.open('http://localhost:8000/my-map.html')
print("started")
def finish():
t1.join()
sys.exit()
if __name__ == "__main__":
main()
time.sleep(5)
finish()
而不是“time.sleep(5)”,而是触发关闭窗口的事件finish()
。另外,我不太确定如何专门关闭线程(我在线程或 python 方面不是很有经验),所以finish
我t1.join()
将如何关闭服务器的线程。我愿意接受有关如何通常启动 http 服务器并使用我的 gui 的关闭窗口事件关闭它的任何建议。
对于多处理,我尝试了这样的事情:
print("HTTP server running on port 8000")
p = Process(target = subprocess.run(['python', '-m', 'http.server']))
def main():
webbrowser.open('http://localhost:8000/my-map.html')
p.start()
def finish():
p.terminate()
sys.exit()
(main
并且finish
可以从这里替换到第一个样本中,因为我正在尝试完成同样的事情)。
解决方案
推荐阅读
- reactjs - 首次加载时,我在 git 页面中的默认页面未加载
- mysql - Mysql 将排序规则从 latin1_swedish_ci 更改为 utf8mb4_bin
- mysql - Mysql多个连接具有相同的列
- google-sheets - 谷歌表格“IFS 需要成对的参数”
- javascript - 如何在 mouseenter 上显示 subnav 在 mouseout 上隐藏
- javascript - 如何在 TypeScript 中重新排列数组
- vb.net - 乘法图
- delphi - 如何检测文件夹更改何时完成?
- c - 如何在小端机器上返回 351351 int?
- bash - 如何在 If 语句中比较 shell 中的 2 个布尔变量