2013-07-09 1 views
0

если я запустить сервер CherryPy и порт берется я Жду»т найти способ, чтобы получить сведение о нем:CherryPy отсутствует ErrorEvent если порт взяты

 
import cherrypy 

try: 
    cherrypy.quickstart() 
    print "Message1" 
except: 
    print "Message2" 

. Как я могу видеть с помощью pdb, он разворачивает другой экземпляр, и это новое не получится (верните трассировку), и я не вижу никаких шансов узнать об этом. Также ни одна из моих линий печати не распечатывается.

Как я могу получить уведомление из моего кода, если порт был взят, и сервер не запустился?

ответ

1

Я нахожу, что когда мое вишневое приложение не может найти открытый порт, это из старого экземпляра в подвешенном состоянии. Так что в Linux я бегу ...

$sudo ps -ef| grep python 
root  2579  1 1 07:52 ?  00:02:19 /opt/Python-3.2/python /var/www/html/app/webapp.py 

затем ...

$kill -9 2579 

Вы могли бы добиться этого в питона, но это должно произойти довольно редко. Дайте мне знать, если вам нужны инструкции для окон.

Andrew

0

Вы можете проверить порт перед запуском сервера:

import sys 

import cherrypy as cp 
from cherrypy.process.servers import check_port 

class Root(object): 

    @cp.expose 
    def index(self): 
     return "Sample" 

config = {'global': {'server.socket_port': 8080}} 
cp.config.update(config) 
port = cp.config.get('server.socket_port') 
host = cp.config.get('server.socket_host', '127.0.0.1') 
try: 
    check_port(host, port) 
except IOError: 
    sys.stderr.write("The port %s is not free\n" % port) 
    sys.exit(-1) 
else: 
    cp.quickstart(Root(), config=config)