我试图从mac终端设置一个python服务器。
我导航到文件夹位置使用:
python -m SimpleHTTPServer
但这给了我错误:
socket.error: [Errno 48] Address already in use
我以前使用相同的命令打开了一个连接 在我的电脑里的不同位置的一个不同的网站。
我试图从mac终端设置一个python服务器。
我导航到文件夹位置使用:
python -m SimpleHTTPServer
但这给了我错误:
socket.error: [Errno 48] Address already in use
我以前使用相同的命令打开了一个连接 在我的电脑里的不同位置的一个不同的网站。
当前回答
以防上述解决方案不起作用:
获取进程正在侦听的端口: $ ps ax | grep python 终止进程 $ kill PROCESS_NAME
其他回答
简单的解决方案:
查找使用端口8080的进程:
sudo lsof -i:8080
终止该端口上的进程:
kill $PID
kill -9 $PID //to forcefully kill the port
PID从步骤1的输出中获得。
补充迈克尔·施密德的答案 刚刚遇到了一个问题,为了允许重新绑定端口,需要像这样子类化套接字服务器:
from socketserver import TCPServer, BaseRequestHandler
from typing import Tuple, Callable
class MySockServer(TCPServer):
def __init__(self, server_address: Tuple[str, int], RequestHandlerClass: Callable[..., BaseRequestHandler]):
self.allow_reuse_address = True
super().__init__(server_address, RequestHandlerClass)
因为在实例化之后,没有必要更改该标志。 然后使用它而不是TCPServer或任何您正在使用的东西。
顺便说一下,为了防止这种情况首先发生,在SimpleHTTPServer仍然正常运行时,只需在终端中按下Ctrl+C。这将“正确地”停止服务器并释放端口,这样您就不必在重新启动服务器之前再次查找并杀死该进程。
(Mods:我确实试图把这条评论放在最好的答案上,但我没有足够的声誉。)
以防上述解决方案不起作用:
获取进程正在侦听的端口: $ ps ax | grep python 终止进程 $ kill PROCESS_NAME
您可以使用allow_reuse_address允许服务器重用一个地址。
服务器是否允许重用地址。默认为False,可以在子类中设置以更改策略。
import SimpleHTTPServer, SocketServer
PORT = 8000
httpd = SocketServer.TCPServer(("", PORT), SimpleHTTPServer.SimpleHTTPRequestHandler)
httpd.allow_reuse_address = True
print "Serving at port", PORT
httpd.serve_forever()