我试图从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
我以前使用相同的命令打开了一个连接 在我的电脑里的不同位置的一个不同的网站。
当前回答
我有一个树莓派,我使用python web服务器(使用Flask)。我已经尝试了上面的所有方法,唯一的解决方案是关闭终端(shell)并再次打开它。或者重新启动树莓派,因为没有什么可以停止web服务器……
其他回答
您可以使用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()
您已经有一个绑定到默认端口(8000)的进程。如果您之前已经运行了相同的模块,那么该进程很可能仍然绑定到端口。试着先找到另一个进程:
$ ps -fA | grep python
501 81651 12648 0 9:53PM ttys000 0:00.16 python -m SimpleHTTPServer
命令参数包括在内,因此如果有多个python进程处于活动状态,您可以发现正在运行的SimpleHTTPServer。您可能希望测试http://localhost:8000/是否仍然显示本地文件的目录列表。
第二个数字是进程号;通过发送一个信号停止服务器:
kill 81651
这将发送一个标准SIGTERM信号;如果进程没有响应,你可能不得不求助于更严格的方法,比如发送SIGKILL (kill -s kill <pid>或kill -9 <pid>)信号。详见维基百科。
或者,在不同的端口上运行服务器,通过在命令行上指定替代端口:
$ python -m SimpleHTTPServer 8910
Serving HTTP on 0.0.0.0 port 8910 ...
然后以http://localhost:8910的身份访问服务器;其中8910可以是1024及以上的任何数字,前提是端口尚未被占用。
Use
sudo lsof -i:5000
这将为您提供使用该端口的进程列表(如果有的话)。 一旦给出了进程列表,使用PID列上的id终止进程使用
kill 379 #use the provided PID
我有一个树莓派,我使用python web服务器(使用Flask)。我已经尝试了上面的所有方法,唯一的解决方案是关闭终端(shell)并再次打开它。或者重新启动树莓派,因为没有什么可以停止web服务器……
我是Python的新手,但经过简单的研究后,我发现这是典型的套接字被绑定。碰巧该套接字仍在使用,您可能需要等待才能使用它。或者,你可以添加:
tcpSocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
这将使端口在更短的时间内可用。在我的例子中,它几乎立即使端口可用。