2009-04-20 109 views
13

当我运行的CherryPy的Hello World:的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()) 

...我得到这个:IO错误:8080端口未绑定的 'localhost' 的。会是什么呢?

+0

我以前遇到过这个问题。我希望这个问题能帮助别人。 – 2009-04-29 16:15:25

回答

7

您可能已经在该端口上收听其他内容。

在Linux上做:

netstat -pnl | grep 8080 

,看看有什么进程在8080

听在Windows上使用类似TCPView做同样的。

1
  • 使用它不同的端口(8000例)上
  • 阅读ConfigApi(再次)
  • 试用最新版本不是3.0
  • 此外,这可以通过一些Windows防火墙引起的(ESET安全套装或者其他)。所以只需在不同的端口上使用它。
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和3.1.1的CherryPy和我运行-W ignore脚本:

 
c:\My_path> python -W ignore MyProj.py 

如果你是下* nix中,你应该把-W ignore#!评论顶部的文件。

+0

“-W忽略”是因为CherryPy 3.1.1并不完全支持Python 2.6;但对于我们这里的内部需求来说它仍然足够好。 – joce 2009-04-29 20:41:12

0

AVG Anti-Virus给我造成这个问题。卸载AVG(远非理想)诀窍。我怀疑我无法禁用的链接扫描程序。

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上找到。

9

如果你想在Heroku上,在那里你不能使用回环来检查您是否已经真正打开一个端口,那么你需要简单地禁用CherryPy的wait_for_occupied_port()功能部署CherryPy的,这样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

虽然非常有用,但这个答案实际上不属于这里,因为它与OP的原始问题很少有关。在这种情况下,对你非常有价值的答案进行更详细和具体的问题__ask更合适___然后,回答它:)。我意识到其他人对这个问题有类似的答案......但它更像是一个线程劫持任何东西。 – 2012-07-31 12:32:02

+3

我的答案涉及运行**精确**脚本并获取**精确**错误。我没有看到这个问题如何“做得很少”。你可以从@ laurasia的回答中看到,其他人也认为我的答案也与这个问题有关。 – 2012-07-31 13:18:57

0

我不得不运行的CherryPy 3.2.2当同样的问题,我的Win7电脑上与Python 3.3 服务器将正常启动,然后会在几分钟内崩溃。

我申请了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)) 
... 
1

如果你在OS X上,尝试调用:

sudo lsof -i :8080 

它会告诉你使用该端口的过程。