如何确认Python简单HTTP服务器正在运行
我有一个运行在Raspberry Pi上的Python简单HTTP服务器,使用openCV,我正在使用下面的代码通过ngrok为网络摄像头提供视频流。我想确保它保持远程运行,因为我已经让它在我身上锁定了几次,我需要手动重新启动它。我不确定它周期性失败的原因,因为我在启动时运行脚本,当我从控制台运行它时,似乎无法重现错误 如何确保HTTP服务器正在运行?文档似乎没有涵盖这一点,所以这可能更像是一个Linux问题 以下是工作代码:如何确认Python简单HTTP服务器正在运行,python,linux,http,Python,Linux,Http,我有一个运行在Raspberry Pi上的Python简单HTTP服务器,使用openCV,我正在使用下面的代码通过ngrok为网络摄像头提供视频流。我想确保它保持远程运行,因为我已经让它在我身上锁定了几次,我需要手动重新启动它。我不确定它周期性失败的原因,因为我在启动时运行脚本,当我从控制台运行它时,似乎无法重现错误 如何确保HTTP服务器正在运行?文档似乎没有涵盖这一点,所以这可能更像是一个Linux问题 以下是工作代码: import http.server import socketse
import http.server
import socketserver
import cv2
import time
PORT = 8000
cap = cv2.VideoCapture(0)
class MyHandler(http.server.BaseHTTPRequestHandler):
def do_GET(self):
if self.path.startswith('/image'):
self.send_response(200)
self.send_header("Content-type", "image/jpeg")
self.end_headers()
ret, frame = cap.read()
_, jpg = cv2.imencode(".jpg", frame)
self.wfile.write(jpg)
else:
self.send_response(404)
myserver = socketserver.TCPServer(("", PORT), MyHandler)
with myserver as httpd:
print("Serving at port ", PORT)
try:
httpd.serve_forever()
except:
pass
我的计划是并行运行此脚本:
while True:
serverActive = #someway of confirming server is active (how can I do this?)
if serverActive = False
try:
#attempt to restart server
startServer = subprocess.Popen(["/home/pi/Desktop/startServer.py"], stdin=subprocess.PIPE)
except:
pass
time.sleep(5000)
有很多种方法可以在计算机中实现“其中之一” 您可以简单地捕获已经使用的端口(我怀疑服务器可能已经为此而引发) 如果没有,(或者如果您想在多种端口或多个端口上运行,等等),您可能会发现最方便的
导入fcntl
导入操作系统
导入系统
RUN_LOC=“/var/RUN/myapp”
打开(运行位置,r+)作为fd:
try:#尝试获取锁以排除其他程序的访问
fcntl.fcntl(fd,fcntl.LOCK_EX)#fd关闭时释放锁
除了OSError:#锁定失败
sys.exit(“锁定失败;归PID:{}所有”。格式(fd.read())
fd.write(os.getpid())#由于拥有锁,因此对文件没有竞争
fd.truncate()#的内容可能比以前少(PID 5 vs 10)
#在这里提供上下文