我最近更新了我的应用并尝试运行它,并得到以下关于"地址已在使用中"的错误.这是什么意思,我该如何解决?
Traceback (most recent call last):
File "/home/ubuntu/workspace/app.py", line 11, in <module>
app.run(host = os.getenv('IP', '0.0.0.0'), port=int(os.getenv('PORT',8080)))
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 772, in run
run_simple(host, port, self, **options)
File "/usr/local/lib/python2.7/dist-packages/werkzeug/serving.py", line 687, in run_simple
inner()
File "/usr/local/lib/python2.7/dist-packages/werkzeug/serving.py", line 653, in inner
fd=fd).serve_forever()
File "/usr/local/lib/python2.7/dist-packages/werkzeug/serving.py", line 557, in make_server
passthrough_errors, ssl_context, fd=fd)
File "/usr/local/lib/python2.7/dist-packages/werkzeug/serving.py", line 467, in __init__
HTTPServer.__init__(self, (host, int(port)), handler)
File "/usr/lib/python2.7/SocketServer.py", line 419, in __init__
self.server_bind()
File "/usr/lib/python2.7/BaseHTTPServer.py", line 108, in server_bind
SocketServer.TCPServer.server_bind(self)
File "/usr/lib/python2.7/SocketServer.py", line 430, in server_bind
self.socket.bind(self.server_address)
File "/usr/lib/python2.7/socket.py", line 224, in meth
return getattr(self._sock,name)(*args)
socket.error: [Errno 98] Address already in use
Run Code Online (Sandbox Code Playgroud)
jon*_*010 22
在 OSX (12.1) 上
跑步:
sudo lsof -i -P | sudo lsof -i -P | grep 听 | 查询 5000
ControlCe 1619 xxx 21u IPv4 xxx 0t0 TCP *:5000 (LISTEN)
ControlCe 1619 xxx 22u IPv6 xxx 0t0 TCP *:5000 (LISTEN)
Run Code Online (Sandbox Code Playgroud)
如果 ControlCe 返回(Apple 的控制中心)正在运行。要将其关闭,请转至:
Apple/系统偏好设置/共享/并关闭 AirPlay 接收器
Kev*_*uan 12
这意味着有另一个服务使用该端口(8080
在这种情况下).也许是因为你忘了关闭另一个正在运行的Flask应用程序而且它正在使用8080
端口.
但是,您可以更改正在使用的端口,例如将其更改为4444
:
if __name__=="__main__":
app.run(host=os.getenv('IP', '0.0.0.0'),
port=int(os.getenv('PORT', 4444)))
Run Code Online (Sandbox Code Playgroud)
但无论如何,我想你想知道哪个程序正在使用那个部分,如果它不是你的程序.你可以使用nmap
或netcat
GNU程序来检查它.
这是netcat
方式(从这里):
$ sudo netstat -nlp | grep 8080
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 125004/nginx
Run Code Online (Sandbox Code Playgroud)
当你得到它时,我建议手动停止它(例如,如果它nginx
或其他HTTP服务器,然后通过service
命令或systemctl
如果你使用systemd Linux 停止它)
你也可以通过命令杀死它kill
:
kill <pid>
Run Code Online (Sandbox Code Playgroud)
你也可以通过killall
或杀死它pkill
,它使用进程名称而不是它的pid:
killall/pkill <process name>
Run Code Online (Sandbox Code Playgroud)
您可以使用以下命令获取具有 python 关键字的所有正在运行的进程的 pid:
ps -fA | 蟒蛇
得到pid后的use kill命令如下:
杀死 -9 pid
运行以上两个命令后,现在运行flask应用程序,它会正常工作
小智 7
这将杀死端口上的所有进程8080
kill -9 $(lsof -t -i:"8080")
Run Code Online (Sandbox Code Playgroud)
如果您使用的Ctrl+Z
只是停止进程(暂停)而不是Ctrl+C
停止进程,您最终可能会得到一个open port
.
您可以简单地使用运行函数的主机和端口参数来设置另一个主机和端口。这样您就可以测试您的应用程序。
if __name__=="__main__":
app.run(host='127.0.0.9',port=4455,debug=True)
Run Code Online (Sandbox Code Playgroud)
我遇到过同样的问题。
我列出了使用该命令运行的所有应用程序
sudo lsof -i -P -n | grep LISTEN
Run Code Online (Sandbox Code Playgroud)
还有另一个应用程序使用相同的端口。
在我停止另一个应用程序后,我可以启动我的 Flask 应用程序。
归档时间: |
|
查看次数: |
11654 次 |
最近记录: |