如何在.py文件中运行一个继续提供服务的本地主机,直到关键字停止它为止?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在.py文件中运行一个继续提供服务的本地主机,直到关键字停止它为止?相关的知识,希望对你有一定的参考价值。
当我运行本地主机服务器来查看我的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()
不适合这项工作,但我不确定是什么。
另外,我是否需要担心关闭套接字?我一直能够使用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()
我稍微调整了迈克尔给我的代码并且有了线程.Timer调用一个全新的函数,它在浏览器中打开窗口并检查kill-word。我确信我的关机不是最有效的方式,但我需要它。我肯定需要研究更多线程示例以找到最佳方法
以上是关于如何在.py文件中运行一个继续提供服务的本地主机,直到关键字停止它为止?的主要内容,如果未能解决你的问题,请参考以下文章