Python SimpleHttpServer后台错误



使用一个非常简单的BaseHttpServer(下面的代码),我遇到了以下问题:

使用./testserver.py &在后台启动服务器运行良好,服务器在端口12121上做出响应。当我输入disown时,服务器仍然会做出响应。关闭终端后,服务器在test.log 中出现输入/输出错误的下一个请求后停止

重建步骤:

$ ./testserver &
$ bg
$ disown

关闭终端,向服务器发送请求->服务器不响应。

我找到的唯一解决方案是重定向stdoutstderr:$/testserver>/dev/null 2>&1.或者正如@Daniel所说,用nohup 的通常方式

以前有人经历过这个错误吗?如果没有可能的输出,为什么HttpServer会崩溃?


testserver.py

#! /usr/bin/env python
import time
import BaseHTTPServer

HOST_NAME = '0.0.0.0'
PORT_NUMBER = 12121

class MyHandler(BaseHTTPServer.BaseHTTPRequestHandler):
    def do_HEAD(s):
        s.send_response(200)
        s.send_header("Content-type", "text/html")
        s.end_headers()
    def do_GET(s):
        """Respond to a GET request."""
        s.send_response(200)
        s.send_header("Content-type", "text/html")
        s.end_headers()
        s.wfile.write("MANUAL SERVER SUCCESS")
if __name__ == '__main__':
    server_class = BaseHTTPServer.HTTPServer
    httpd = server_class((HOST_NAME, PORT_NUMBER), MyHandler)
    try:
        httpd.serve_forever()
    except Exception as e:
        with open('test.log', 'w') as f:
            f.write(str(e))

您只能将字符串写入文件,而不能写入异常。您必须将stdoutstderr重定向到某个位置,否则任何输出都将挂起您的程序。为什么不使用nohup?这是正常的方式,在没有终端的情况下启动程序。

为了说明这一点:HttpServer中没有特殊的行为。HttpServer正在向终端写入日志信息,因此您需要一个终端或重定向到一个文件。

相关内容

  • 没有找到相关文章

最新更新