2009-04-20 340 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 

它會告訴你使用該端口的過程。