我想启动本地服务器,然后使用同一个python程序中的浏览器打开一个链接。
这就是我的尝试(一种非常幼稚和愚蠢的尝试):
InputStream is1 = con1.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is1);
byte[] buffer = new byte[2048]; // or whatever size you want
int n;
OutputStream os = new FileOutputStream("test.doc");
while ((n = bis.read(buffer)) >= 0) {
os.write(buffer, 0, n);
}
os.close();
bis.close();
但是,程序不会转到第二个语句,因为服务器仍在后台运行。要打开浏览器,我需要退出服务器,这会破坏运行服务器的目的。
任何人都可以建议一个有效的解决方案来帮助我吗?
答案 0 :(得分:1)
您可以在守护程序线程中启动Web服务器(如果只剩下守护程序线程,则退出Python程序),然后从主线程发出请求。
唯一的问题是将主线程同步到服务器线程,因为HTTP服务器需要一些时间来启动,并且在此之前不会处理任何请求。我不知道一个简单而干净的解决方案,但你可以(有点hackish)暂停主线程数秒(可能更短)并在此之后开始发出请求。另一种选择是从一开始就向Web服务器发送请求,并期望它们在一段时间内失败。
这是一个小型示例脚本,其中包含一个简单的HTTP Web服务器,它通过localhost:8080
上的TCP提供来自本地文件系统的内容,以及一个示例请求,从Web服务器的目录中请求文件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...)