Mercurial > hg
view tests/dumbhttp.py @ 23264:e8235dd18a56 stable
Added tag 3.2.1 for changeset 643c58303fb0
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Tue, 11 Nov 2014 17:24:47 -0600 |
parents | 10116463b0b1 |
children | 6eab50a34fed |
line wrap: on
line source
#!/usr/bin/env python """ Small and dumb HTTP server for use in tests. """ from optparse import OptionParser import BaseHTTPServer, SimpleHTTPServer, os, signal, subprocess, sys def run(server_class=BaseHTTPServer.HTTPServer, handler_class=SimpleHTTPServer.SimpleHTTPRequestHandler, server_address=('localhost', 8000)): httpd = server_class(server_address, handler_class) httpd.serve_forever() if __name__ == '__main__': parser = OptionParser() parser.add_option('-p', '--port', dest='port', type='int', default=8000, help='TCP port to listen on', metavar='PORT') parser.add_option('-H', '--host', dest='host', default='localhost', help='hostname or IP to listen on', metavar='HOST') parser.add_option('--pid', dest='pid', help='file name where the PID of the server is stored') parser.add_option('-f', '--foreground', dest='foreground', action='store_true', help='do not start the HTTP server in the background') (options, args) = parser.parse_args() signal.signal(signal.SIGTERM, lambda x, y: sys.exit(0)) if options.foreground and options.pid: parser.error("options --pid and --foreground are mutually exclusive") if options.foreground: run(server_address=(options.host, options.port)) else: # This doesn't attempt to cleanly detach the process, as it's not # meant to be a long-lived, independent process. As a consequence, # it's still part of the same process group, and keeps any file # descriptors it might have inherited besided stdin/stdout/stderr. # Trying to do things cleanly is more complicated, requires # OS-dependent code, and is not worth the effort. proc = subprocess.Popen([sys.executable, __file__, '-f', '-H', options.host, '-p', str(options.port)], stdin=open(os.devnull, 'r'), stdout=open(os.devnull, 'w'), stderr=subprocess.STDOUT) if options.pid: fp = file(options.pid, 'wb') fp.write(str(proc.pid) + '\n') fp.close()