2014-04-24 33 views
0

使用非常簡單BaseHttpServer(下面的代碼),我遇到了以下問題:Python SimpleHttpServer後臺錯誤?

使用./testserver.py &開始在後臺服務器工作正常,在端口12121的服務器響應。當我輸入disown時,服務器仍然響應。在test.log

步驟與輸入/輸出錯誤關閉服務器停止終端的下一個請求之後重構後:

$ ./testserver & 
$ bg 
$ disown 

靠近終端,發送到服務器的請求 - >服務器沒有響應。

我發現的唯一的解決辦法是重定向stdoutstderr: $ ./testserver>的/ dev/null的2> 或@Daniel換句話說與nohup

必須調用它通常的方式任何人都曾經遇到過這個bug,或者爲什麼在沒有輸出的情況下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)) 

回答

2

只能寫入字符串的文件不例外。而且你必須重定向stdoutstderr某處,否則任何輸出都會掛起你的程序。你爲什麼不使用nohup?這是正常的方式,開始沒有終端的程序。

爲了清楚:HttpServer中沒有特殊的行爲。 HttpServer正在將日誌信息寫入終端,因此您需要終端或重定向到文件。

+0

你對這兩點都是正確的,相應地改變了代碼(只是忘記了'write'沒有使用'__str__'方法,然後我確實得到了'Input/outpu error'。如果沒有可能的輸出,爲什麼它是希望HttpServer崩潰的行爲 – ProfHase85