13

当我运行 CherryPy Hello World 时:

import cherrypy

class HelloWorld:
    def index(self):
        return "Hello world!"
    index.exposed = True

cherrypy.config.update({'server.socket_port': 8080,})
cherrypy.quickstart(HelloWorld())

...我明白了:IOError:端口 8080 未绑定在“本地主机”上。会是什么呢?

4

10 回答 10

9

如果你尝试在 Heroku 上部署 CherryPy,你无法使用 loopback 来检查你是否真的打开了一个端口,那么你只需要简单地禁用 CherryPy 的wait_for_occupied_port()功能,这样 CherryPy 的自我一致性检查就不会确定它有,事实上, 未能启动。以下是我用来修复 CherryPy 以使其在 Heroku 上运行的三行代码:

    from cherrypy.process import servers
    def fake_wait_for_occupied_port(host, port): return
    servers.wait_for_occupied_port = fake_wait_for_occupied_port
于 2012-02-14T03:28:22.327 回答
7

您可能在该端口上侦听了其他内容。

在 Linux 上执行:

netstat -pnl | grep 8080

并查看 8080 上正在监听什么进程

在 Windows 上使用类似TCPView的东西来做同样的事情。

于 2009-04-20T09:57:38.253 回答
3

正如Jason R. Coombs所写,禁用环回设备存在问题。heroku.com 已禁用环回,因此 CherryPy 将崩溃。我为此提交了一个错误

更新:报告为已解决。

于 2011-10-28T20:25:38.320 回答
2

我想当我开始使用 CherryPy 时遇到了类似的问题......但我不记得它到底是什么......但修复涉及使用配置文件而不是手动传递配置:

MyProj.conf:

[全球的]
server.socket_host = "127.0.0.1"
server.socket_port = 8080
server.thread_pool = 10

MyProj.py

import os
import cherrypy

class HelloWorld:
    def index(self):
        return "Hello world!"
    index.exposed = True

# Assumes the config file is in the directory as the source.    
conf_path = os.path.dirname(os.path.abspath(__file__))
conf_path = os.path.join(conf_path, "MyProj.conf")
cherrypy.config.update(conf_path)
cherrypy.quickstart(HelloWorld())

这肯定在这里有效。
我正在使用 Python 2.6.1 和 CherryPy 3.1.1,并使用以下命令运行脚本-W ignore

c:\My_path> python -W 忽略 MyProj.py

如果您在 *nix 下,则应将 放在文件顶部的注释中-W ignore#!

于 2009-04-29T20:05:54.193 回答
2

我昨天在 Ubuntu Linux 服务器上遇到了这个问题。在我意识到错误消息非常笼统之前,我花了几个小时试图找出 CherryPy 代码中的错误。即使主机不拥有服务器尝试绑定的 IP 地址,它也会给出此错误消息。在我的情况下,环回接口(lo,127.0.0.1)被禁用。因此,即使我设置server.socket_host='0.0.0.0'了 ,检查端口 的尝试wait_for_occupied_port也会失败(因为它合理地假设环回接口始终可用)。重新启用回送接口后,CherryPy 服务器将正常启动。

更新:CherryPy 3.2.3 修复了这个特定问题。在 3.2.3 发布之前,可以在CherryPy 项目下载中获得开发版本。

于 2010-07-19T15:03:13.243 回答
1
  • 在不同的端口上使用它(例如 8000)
  • 阅读ConfigApi(再一次)
  • 尝试最新版本而不是 3.0
  • 这也可能是由某些 Windows 防火墙(Eset smart security 或其他)引起的。所以只需在不同的端口上使用它。
于 2009-04-29T16:13:27.497 回答
1

如果您使用的是 OS X,请尝试调用:

sudo lsof -i :8080

这将告诉您使用该端口的过程。

于 2016-03-04T13:58:52.977 回答
0

AVG Anti-Virus 给我造成了这个问题。卸载 AVG(远非理想)就可以了。我怀疑我无法禁用的链接扫描仪。

于 2009-06-28T23:44:03.020 回答
0

在我的 Win7 PC 上使用 Python 3.3 运行 CherryPy 3.2.2 时,我遇到了同样的问题。服务器将正常启动,然后在大约几分钟内崩溃。

我已经应用了CherryPy 3.2.3 laurasia 中提到的补丁。但这没有帮助。

所以我不得不在最后注释掉引发错误的行,python\Lib\site-packages\cherrypy\process\servers.py以防止服务器死机:

...
#    if host == client_host(host):
#        raise IOError("Port %r not bound on %r" % (port, host))
...
于 2013-04-11T19:52:27.823 回答
0

视窗 10

如果你得到一个 python 异常打印到 stdio,8080 在 127.0.0.1 上不是免费的,那么你要做的是:

netstat -o -a

在 Windows 命令提示符下。单独做netstat -o会给你一个不正确的PID。

在第一列的地址字符串中查找 8080。找到后,水平转到最后一列,即 PID(进程 ID)。

现在要终止一个进程,我使用kill <PID>它是 mysys 安装的一部分。where kill我在我的系统上发现了这一点。

因此,所有在一起:

netstat -o -a
[find PID then hit ctrl-c to stop netstat]
kill 13164  

其中 13164 是第一步中找到的示例 PID。

如果您没有安装 mysys,请安装它,或者在 windows 上查找如何通过其 PID 杀死进程。

于 2020-09-27T02:40:57.893 回答