尝试运行Flask应用程序会显示"地址已在使用中"

use*_*264 6 python flask

我最近更新了我的应用并尝试运行它,并得到以下关于"地址已在使用中"的错误.这是什么意思,我该如何解决?

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 接收器

  • 感谢您解释 OSX 上 ControlCe 的含义。 (2认同)

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)

但无论如何,我想你想知道哪个程序正在使用那个部分,如果它不是你的程序.你可以使用nmapnetcatGNU程序来检查它.

这是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)


小智 12

尝试使用此命令终止服务器上运行的所有其他进程

须藤热熔器 -k xxxx/tcp

用您的端口名称替换 xxxx


Pra*_*pta 7

您可以使用以下命令获取具有 python 关键字的所有正在运行的进程的 pid:

ps -fA | 蟒蛇

得到pid后的use kill命令如下:

杀死 -9 pid

运行以上两个命令后,现在运行flask应用程序,它会正常工作

  • 我不确定这是否回答了最初的问题? (2认同)

小智 7

这将杀死端口上的所有进程8080

kill -9 $(lsof -t -i:"8080")
Run Code Online (Sandbox Code Playgroud)

如果您使用的Ctrl+Z只是停止进程(暂停)而不是Ctrl+C停止进程,您最终可能会得到一个open port.


Rah*_*hul 6

您可以简单地使用运行函数的主机和端口参数来设置另一个主机和端口。这样您就可以测试您的应用程序。

if __name__=="__main__":
    app.run(host='127.0.0.9',port=4455,debug=True) 
Run Code Online (Sandbox Code Playgroud)


bra*_*o79 5

我遇到过同样的问题。

我列出了使用该命令运行的所有应用程序

sudo lsof -i -P -n | grep LISTEN
Run Code Online (Sandbox Code Playgroud)

还有另一个应用程序使用相同的端口。

在我停止另一个应用程序后,我可以启动我的 Flask 应用程序。