Frage

Wenn ich CherryPy Hallo Welt bin mit:

import cherrypy

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

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

... ich diesen: IOError: Port 8080 nicht gebunden auf 'localhost'. Was könnte es sein?

War es hilfreich?

Lösung

Sie haben wahrscheinlich etwas anderes an diesem Port zu hören.

Unter Linux tun:

netstat -pnl | grep 8080

Und sehen, welcher Prozess auf 8080 hört

Unter Windows verwenden Sie so etwas wie TCPView das gleiche zu tun.

Andere Tipps

Wenn Sie versuchen, CherryPy auf Heroku zu implementieren, wo man nicht den Loopback verwenden kann, um zu überprüfen, ob Sie wirklich ein Port geöffnet haben, dann müssen Sie einfach CherryPy die wait_for_occupied_port() Funktion deaktivieren, so dass CherryPy Selbstkonsistenzprüfung nicht, dass es nicht entscheiden hat in der Tat, kann nicht zu starten. Hier sind die drei Linien, die ich CherryPy verwenden, um zu beheben, so dass es auf Heroku läuft:

    from cherrypy.process import servers
    def fake_wait_for_occupied_port(host, port): return
    servers.wait_for_occupied_port = fake_wait_for_occupied_port

Wie Jason R. Coombs schrieb gibt es ein Problem mit behindertem Loopback Gerät. heroku.com hat Loopback deshalb stürzt CherryPy deaktiviert. Ich eingereicht einen Fehler für diese .

Update:. Berichtet als aufgelöst

Ich lief in dieses Problem gestern auf einem Ubuntu Linux-Server. Ich verbrachte ein paar Stunden, um den Fehler in dem CherryPy Code aufzuspüren versuchen, bevor ich, dass die Fehlermeldung realisierte sehr allgemein gehalten ist. Es wird diese Fehlermeldung geben, auch wenn der Host die IP-Adresse nicht besitzt, zu dem der Server zu binden versucht. In meinem Fall die Loopback-Schnittstelle (lo, 127.0.0.1) war deaktiviert. Somit kann, selbst wenn ich gesetzt server.socket_host='0.0.0.0', den Versuch, den Hafen zu überprüfen, wait_for_occupied_port, scheitern würde (wie es annimmt, vernünftig, dass die Loopback-Schnittstelle immer verfügbar ist). Nachdem die Loopback-Schnittstelle wieder aktiviert, würde der CherryPy Server normal starten.

Update: CherryPy 3.2.3 hat ein Update für dieses besondere Problem. Bis 3.2.3 freigegeben wird, baut Entwicklung ist auf dem CherryPy Projekt Downloads .

  • Verwenden Sie es auf anderen Port (8000 zum Beispiel)
  • Lesen Sie mehr über ConfigApi (wieder)
  • Versuchen neueste Version nicht 3.0
  • Auch kann dies durch einen Windows-Firewall (ESET Smart Security oder vielleicht auch andere) verursacht werden. So ist es nur auf anderen Port verwenden.

Ich glaube, ich hatte ein ähnliches Problem, wenn ich mit CherryPy begann ... Aber ich kann nicht genau erinnern, was es war ... Aber das Update beinhaltete eine Config-Datei anstelle von vorbei an den configs von Hand:

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())

Dies funktioniert auf jeden Fall hier.
Ich verwende Python 2.6.1 und 3.1.1 CherryPy und ich führen Sie das Skript mit -W ignore:

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

Wenn Sie unter * nichts sind, dann sollten Sie die -W ignore im #! Kommentar am Anfang der Datei setzen.

Wenn Sie unter OS X sind, versuchen Aufruf:

sudo lsof -i :8080

, die wird Ihnen sagen, der Prozess, der Port.

AVG Anti-Virus verursacht wurde dieses Problem für mich. Deinstallieren von AVG (bei weitem nicht ideal) hat den Trick. Ich vermute, dass der Link-Scanner, ich konnte nicht deaktiviert werden.

Ich hatte das gleiche Problem, wenn CherryPy 3.2.2 auf meinem Win7 PC mit Python laufe 3.3 Der Server normalerweise starten und dann über ein paar Minuten zum Absturz in würde.

Ich habe die Patch von CherryPy angewendet 3.2.3 Laurasia erwähnt. Aber es hat nicht geholfen.

So hatte ich die Zeilen kommentieren Sie den Fehler am Ende der python\Lib\site-packages\cherrypy\process\servers.py Anheben des Servers zu verhindern, zu sterben:

...
#    if host == client_host(host):
#        raise IOError("Port %r not bound on %r" % (port, host))
...
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top