Вопрос

Когда я запускаю 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())

...Я понимаю это:Ошибка ввода-вывода:Порт 8080 не привязан к «localhost».Что бы это могло быть?

Это было полезно?

Решение

Вероятно, у вас есть что-то еще, прослушивающее этот порт.

В Linux сделайте:

netstat -pnl | grep 8080

И посмотреть какой процесс слушает 8080

В Windows используйте что-то вроде TCPView сделать то же самое.

Другие советы

Если вы пытаетесь развернуть CherryPy на Heroku, где вы не можете использовать петлю для проверки того, действительно ли вы открыли порт, вам нужно просто отключить 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

Как Джейсон Р.Кумбс написал, что проблема с отключенным устройством обратной связи.На сайте Heroku.com отключена петля, поэтому CherryPy выйдет из строя.я сообщил об ошибке для этого.

Обновлять: Сообщается, что проблема решена.

Вчера я столкнулся с этой проблемой на сервере 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.

  • Используйте его на другом порту (например, 8000)
  • Прочитать о КонфигАпи (снова)
  • Попробуйте последнюю версию, а не 3.0.
  • Также это может быть вызвано каким-либо брандмауэром Windows (Eset Smart Security или другим).Так что просто используйте его на другом порту.

Думаю, у меня была похожая проблема, когда я начал использовать CherryPy...Но я не помню точно, что это было...Но исправление заключалось в использовании файла конфигурации вместо передачи конфигураций вручную:

МойПродж.конф:

[global]
server.socket_host = "127.0.0.1"
server.socket_port = 8080
server.thread_pool = 10

МойПродж.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 в #! комментарий вверху файла.

Если вы используете OS X, попробуйте позвонить:

sudo lsof -i :8080

который расскажет вам процесс, использующий этот порт.

Антивирус AVG вызывал у меня эту проблему.Удаление AVG (далекое от идеала) помогло.Я подозреваю, что это сканер ссылок, который я не смог отключить.

У меня была такая же проблема при запуске Cherrypy 3.2.2 на моем ПК Win7 с Python 3.3 Сервер запускается нормально, а затем сбой примерно через пару минут.

Я применил пластырь из 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))
...
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top