gpt4 book ai didi

python - 如何运行一个本地主机,该主机可以一直提供服务,直到关键字将其停止为止(全部来自.py文件)?

转载 作者:行者123 更新时间:2023-12-03 12:08:22 25 4
gpt4 key购买 nike

当我运行本地主机服务器以查看html文件时,通常使用命令行提示符:
python -m http.server 8000
但是,我希望能够从.py文件中执行此操作,而且我很挣扎。
理想情况下,运行py文件时,它应该启动服务器,在默认的Web浏览器中打开localhost,然后保持打开状态,直到用户键入关键字“exit”为止。根据http.server文档,我当前的代码如下所示:

import http.server
import socketserver
import webbrowser

PORT = 8000
URL = f'localhost:{PORT}/MapViz.html'

def run():
Handler = http.server.SimpleHTTPRequestHandler
with socketserver.TCPServer(("", PORT), Handler) as httpd:
print("Enjoy your visualization!")
httpd.serve_forever()

if __name__ == "__main__":
run()
webbrowser.open_new(URL)

我知道,在用户完成操作后,它目前无法关闭服务器,但我只是在努力使其首先打开浏览器。似乎 serve_forever()不是适合该工作的工具,但我不确定是什么。

另外,我是否需要担心要关闭 socket ?我一直可以对文件使用 with open(x) as file:格式,而不必担心关闭它们,但是在弄乱此错误时出现了Windows错误10048,指出套接字仍在使用,所以我遇到了一个问题,所以也许无法正确关闭。

谢谢!

最佳答案

这是我正在使用的解决方案!

import http.server
import socketserver
import webbrowser
import threading
import sys

PORT = 8000
URL = f'http://localhost:{PORT}/MapViz.html'

def run():
Handler = http.server.SimpleHTTPRequestHandler
global httpd
with socketserver.TCPServer(("", PORT), Handler) as httpd:
print(f"Enjoy your visualization!")
httpd.serve_forever()

def maintain():
webbrowser.open_new(URL)
while True:
user_input = input()
if user_input == 'EXIT' or user_input == 'exit':
print('Shutting down! Run this .exe again to view your visualization again.')
threading.Timer(0.1, httpd.shutdown).start()
break

if __name__ == '__main__':
threading.Timer(1.0, maintain).start()
run()

我微调了Michael给我的代码,并进行了线程化.Timer调用了一个全新的函数,该函数在浏览器中打开了窗口并检查了kill-word。
我确信关机不是最有效的方法,但是可以满足我的需要。我绝对需要研究更多的线程示例以找到最佳方法

关于python - 如何运行一个本地主机,该主机可以一直提供服务,直到关键字将其停止为止(全部来自.py文件)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52194584/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com