如果采取端口,Cherrypy缺少errorevent

时间:2013-07-09 15:50:55

标签: python cherrypy

如果我启动一个樱桃服务器并且端口被占用,我没有找到任何方式来了解它:

import cherrypy

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

。正如我在pdb中看到的那样,它会分叉另一个实例,而这个新实例将会失败(返回回溯)并且我没有任何机会了解它。我的打印行也没有打印出来。

如果端口被占用且服务器无法启动,我怎么能收到我的代码通知?

2 个答案:

答案 0 :(得分: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

你可以在python中实现这一点,但它应该很少发生。如果您需要Windows说明,请告诉我。

安德鲁

答案 1 :(得分: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)