Source

CherryPy / cherrypy / cherryd

The branch 'cherrypy-3.1.x' does not exist.
Robert Brewer d7a1ce5 


Robert Brewer 02a5b68 

Robert Brewer d7a1ce5 



Robert Brewer 00bd250 
Robert Brewer 09e041b 
Robert Brewer d7a1ce5 
Robert Brewer 09e041b 
Robert Brewer 7f7a23a 
Robert Brewer 02a5b68 

Robert Brewer 00bd250 

Robert Brewer d7a1ce5 














Robert Brewer 707501c 



Robert Brewer d7a1ce5 
Robert Brewer 09e041b 







Robert Brewer d7a1ce5 

Robert Brewer 09e041b 










Robert Brewer d7a1ce5 



Robert Brewer 02a5b68 






Robert Brewer d7a1ce5 





Robert Brewer 00bd250 

Robert Brewer d7a1ce5 





Robert Brewer 09e041b 

Robert Brewer 02a5b68 

Robert Brewer d7a1ce5 




Robert Brewer 09e041b 
Robert Brewer 02a5b68 
Robert Brewer d7a1ce5 
#! /usr/bin/env python
"""The CherryPy daemon."""

import sys

import cherrypy
from cherrypy.process import plugins, servers


def start(configfiles=None, daemonize=False, environment=None,
          fastcgi=False, scgi=False, pidfile=None, imports=None):
    """Subscribe all engine plugins and start the engine."""
    sys.path = [''] + sys.path
    for i in imports or []:
        exec "import %s" % i
    
    for c in configfiles or []:
        cherrypy.config.update(c)
    
    engine = cherrypy.engine
    
    if environment is not None:
        cherrypy.config.update({'environment': environment})
    
    # Only daemonize if asked to.
    if daemonize:
        # Don't print anything to stdout/sterr.
        cherrypy.config.update({'log.screen': False})
        plugins.Daemonizer(engine).subscribe()
    
    if pidfile:
        plugins.PIDFile(engine, pidfile).subscribe()
    
    if hasattr(engine, "signal_handler"):
        engine.signal_handler.subscribe()
    if hasattr(engine, "console_control_handler"):
        engine.console_control_handler.subscribe()
    
    if fastcgi and scgi:
        # fastcgi and scgi aren't allowed together.
        cherrypy.log.error("fastcgi and scgi aren't allowed together.", 'ENGINE')
        sys.exit(1)
    elif fastcgi or scgi:
        # Turn off autoreload when using fastcgi or scgi.
        cherrypy.config.update({'engine.autoreload_on': False})
        # Turn off the default HTTP server (which is subscribed by default).
        cherrypy.server.unsubscribe()
        
        sock_file = cherrypy.config.get('server.socket_file', None)
        if sock_file:
            bindAddress = sock_file
        else:
            flup_port = cherrypy.config.get('server.socket_port', 4000)
            flup_bindaddr = cherrypy.config.get('server.socket_host', '0.0.0.0')
            bindAddress = (flup_bindaddr, flup_port)
        if fastcgi:
            f = servers.FlupFCGIServer(application=cherrypy.tree, bindAddress=bindAddress)
        else:
            f = servers.FlupSCGIServer(application=cherrypy.tree, bindAddress=bindAddress)
        s = servers.ServerAdapter(engine, httpserver=f, bind_addr=bindAddress)
        s.subscribe()
    
    # Always start the engine; this will start all other services
    try:
        engine.start()
    except:
        # Assume the error has been logged already via bus.log.
        sys.exit(1)
    else:
        engine.block()


if __name__ == '__main__':
    from optparse import OptionParser
    
    p = OptionParser()
    p.add_option('-c', '--config', action="append", dest='config',
                 help="specify config file(s)")
    p.add_option('-d', action="store_true", dest='daemonize',
                 help="run the server as a daemon")
    p.add_option('-e', '--environment', dest='environment', default=None,
                 help="apply the given config environment")
    p.add_option('-f', action="store_true", dest='fastcgi',
                 help="start a fastcgi server instead of the default HTTP server")
    p.add_option('-s', action="store_true", dest='scgi',
                 help="start a scgi server instead of the default HTTP server")
    p.add_option('-i', '--import', action="append", dest='imports',
                 help="specify modules to import")
    p.add_option('-p', '--pidfile', dest='pidfile', default=None,
                 help="store the process id in the given file")
    options, args = p.parse_args()
    
    start(options.config, options.daemonize,
          options.environment, options.fastcgi, options.scgi, options.pidfile,
          options.imports)