gpt4 book ai didi

python - 如何运行本地服务器并从同一个 python 程序打开 url?

转载 作者:太空宇宙 更新时间:2023-11-03 15:51:13 26 4
gpt4 key购买 nike

我想启动本地服务器,然后使用浏览器从同一 python 程序打开链接。

这就是我尝试过的(一个非常天真的和愚蠢的尝试):

from subprocess import call
import webbrowser

call(["python", "-m", "SimpleHTTPServer"]) #This creates a server at port:8000
webbrowser.open_new_tab("some/url")

但是,程序不会执行第二条语句,因为服务器仍在后台运行。要打开浏览器,我需要退出服务器,这违背了运行服务器的目的。

有人可以帮助我提出可行的解决方案吗?

最佳答案

您可以在守护线程中启动 Web 服务器(如果只剩下守护线程,Python 程序就会退出),然后从主线程发出请求。

唯一的问题是将主线程与服务器线程同步,因为 HTTP 服务器需要一些时间来启动,并且在此之前不会处理任何请求。我不知道有一个简单而干净的解决方案可以做到这一点,但是您可以(有点黑客)将主线程暂停几秒钟(可能更短),然后仅在此之后才开始发出请求。另一种选择是从一开始就向网络服务器发送请求,并期望它们在一段时间内失败。

这是一个小示例脚本,其中包含一个简单的 HTTP Web 服务器,该服务器通过 localhost:8080 上的 TCP 提供来自本地文件系统的内容以及一个示例请求,请求文件 foo.txt 来自网络服务器(在本例中还有脚本)启动的目录。

import sys
import requests
import threading
import time

from BaseHTTPServer import HTTPServer
from SimpleHTTPServer import SimpleHTTPRequestHandler

# set up the HTTP server and start it in a separate daemon thread
httpd = HTTPServer(('localhost', 8080), SimpleHTTPRequestHandler)
thread = threading.Thread(target=httpd.serve_forever)
thread.daemon = True

# if startup time is too long we might want to be able to quit the program
try:
thread.start()
except KeyboardInterrupt:
httpd.shutdown()
sys.exit(0)

# wait until the webserver finished starting up (maybe wait longer or shorter...)
time.sleep(5)

# start sending requests
r = requests.get('http://localhost:8080/foo.txt')

print r.status_code
# => 200 (hopefully...)

关于python - 如何运行本地服务器并从同一个 python 程序打开 url?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41275561/

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