Tan*_*Woo 6 python sockets http
我写了一个基于SimpleHTTPServer和SocketServer的预览函数,KeyboardInterrupt当我进入Ctrl-C停止服务器时我捕获异常:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
import SimpleHTTPServer
import SocketServer
class Reuse_TCPServer(SocketServer.TCPServer):
timeout = 1
allow_reuse_address = True
def preview(port=8000):
try:
Handler = SimpleHTTPServer.SimpleHTTPRequestHandler
httpd = Reuse_TCPServer(("", port), Handler)
except OSError as e:
print("Could not listen on port {}".format(port))
sys.exit(getattr(e, 'exitcode', 1))
try:
httpd.serve_forever()
except (KeyboardInterrupt, SystemExit) as e:
print("Shutting down server")
httpd.socket.close()
if __name__ == "__main__":
preview()
Run Code Online (Sandbox Code Playgroud)
但大多数情况下,如果我打开localhost:8000并立即(几秒钟)输入'Ctrl-C',它将首先显示该消息然后关闭套接字:
127.0.0.1 - - [16/Apr/2014 22:20:42] code 404, message File not found
127.0.0.1 - - [16/Apr/2014 22:20:42] "GET /static/css/autumn.css HTTP/1.1" 404 -
^C----------------------------------------
Exception happened during processing of request from ('127.0.0.1', 52787)
Traceback (most recent call last):
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/SocketServer.py", line 295, in _handle_request_noblock
self.process_request(request, client_address)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/SocketServer.py", line 321, in process_request
self.finish_request(request, client_address)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/SocketServer.py", line 334, in finish_request
self.RequestHandlerClass(request, client_address, self)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/SocketServer.py", line 649, in __init__
self.handle()
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/BaseHTTPServer.py", line 340, in handle
self.handle_one_request()
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/BaseHTTPServer.py", line 310, in handle_one_request
self.raw_requestline = self.rfile.readline(65537)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket.py", line 476, in readline
data = self._sock.recv(self._rbufsize)
KeyboardInterrupt
----------------------------------------
f^C----------------------------------------
Exception happened during processing of request from ('127.0.0.1', 52788)
Traceback (most recent call last):
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/SocketServer.py", line 295, in _handle_request_noblock
self.process_request(request, client_address)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/SocketServer.py", line 321, in process_request
self.finish_request(request, client_address)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/SocketServer.py", line 334, in finish_request
self.RequestHandlerClass(request, client_address, self)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/SocketServer.py", line 649, in __init__
self.handle()
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/BaseHTTPServer.py", line 340, in handle
self.handle_one_request()
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/BaseHTTPServer.py", line 310, in handle_one_request
self.raw_requestline = self.rfile.readline(65537)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket.py", line 476, in readline
data = self._sock.recv(self._rbufsize)
KeyboardInterrupt
----------------------------------------
^CShutting down server
Run Code Online (Sandbox Code Playgroud)
有谁知道如何解决这个问题?
我的经历完全一样。我在 Python 2.7 中发现了一个旧错误,并且有一个补丁应该可以解决这个问题。我检查了一下,补丁当然已经在 SocketServer.py 中了。然而,它并没有解决这个问题。无论如何,我在此处粘贴的链接中的解释值得阅读以尝试获得提示。
https://bugs.python.org/issue14574
| 归档时间: |
|
| 查看次数: |
11322 次 |
| 最近记录: |