CherryPy Hello World错误

时间:2009-04-20 09:36:51

标签: localhost port cherrypy

当我运行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没有绑定在'localhost'上。它可能是什么?

10 个答案:

答案 0 :(得分:10)

如果你试图在Heroku上部署CherryPy,在那里你不能使用环回来检查你是否真的打开了一个端口,那么你需要简单地禁用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

答案 1 :(得分:7)

你可能还有其他东西正在监听该端口。

在Linux上执行:

netstat -pnl | grep 8080

看看8080上正在听什么过程

在Windows上使用类似TCPView的内容来执行相同操作。

答案 2 :(得分:3)

正如Jason R. Coombs所写,禁用环回设备存在问题。 heroku.com已禁用环回,因此CherryPy将崩溃。我filed a bug为此。

更新:Reported as resolved.

答案 3 :(得分: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 project downloads上提供了开发版本。

答案 4 :(得分:1)

  • 在不同的端口(例如8000)上使用它
  • 了解ConfigApi(再次)
  • 试用最新版本而不是3.0
  • 这也可能是由某些Windows防火墙(Eset智能安全或其他)引起的。所以只需在不同的端口使用它。

答案 5 :(得分:1)

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

MyProj.conf:

[global]
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 ignore MyProj.py

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

答案 6 :(得分:1)

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

sudo lsof -i :8080

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

答案 7 :(得分:0)

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

答案 8 :(得分:0)

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

我已经应用了提到的CherryPy 3.2.3 laurasia中的patch。但它没有帮助。

所以我必须在python\Lib\site-packages\cherrypy\process\servers.py的末尾注释掉引发错误的行,以防止服务器死亡:

...
#    if host == client_host(host):
#        raise IOError("Port %r not bound on %r" % (port, host))
...

答案 9 :(得分:0)

Windows 10

如果您收到打印到stdio的python异常,表明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终止进程。