如何确认Python简单HTTP服务器正在运行

如何确认Python简单HTTP服务器正在运行,python,linux,http,Python,Linux,Http,我有一个运行在Raspberry Pi上的Python简单HTTP服务器,使用openCV,我正在使用下面的代码通过ngrok为网络摄像头提供视频流。我想确保它保持远程运行,因为我已经让它在我身上锁定了几次,我需要手动重新启动它。我不确定它周期性失败的原因,因为我在启动时运行脚本,当我从控制台运行它时,似乎无法重现错误 如何确保HTTP服务器正在运行?文档似乎没有涵盖这一点,所以这可能更像是一个Linux问题 以下是工作代码: import http.server import socketse

我有一个运行在Raspberry Pi上的Python简单HTTP服务器,使用openCV,我正在使用下面的代码通过ngrok为网络摄像头提供视频流。我想确保它保持远程运行,因为我已经让它在我身上锁定了几次,我需要手动重新启动它。我不确定它周期性失败的原因,因为我在启动时运行脚本,当我从控制台运行它时,似乎无法重现错误

如何确保HTTP服务器正在运行?文档似乎没有涵盖这一点,所以这可能更像是一个Linux问题

以下是工作代码:

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)
#在这里提供上下文