diff -r 71c1970f27b6 Lib/http/server.py --- a/Lib/http/server.py Mon Nov 14 00:15:52 2016 -0800 +++ b/Lib/http/server.py Tue Nov 15 23:30:31 2016 +0100 @@ -1173,7 +1173,8 @@ def test(HandlerClass=BaseHTTPRequestHandler, - ServerClass=HTTPServer, protocol="HTTP/1.0", port=8000, bind=""): + ServerClass=HTTPServer, protocol="HTTP/1.0", port=8000, bind="", + directory=None): """Test the HTTP request handler class. This runs an HTTP server on port 8000 (or the port argument). @@ -1182,15 +1183,20 @@ server_address = (bind, port) HandlerClass.protocol_version = protocol - with ServerClass(server_address, HandlerClass) as httpd: - sa = httpd.socket.getsockname() - serve_message = "Serving HTTP on {host} port {port} (http://{host}:{port}/) ..." - print(serve_message.format(host=sa[0], port=sa[1])) - try: - httpd.serve_forever() - except KeyboardInterrupt: - print("\nKeyboard interrupt received, exiting.") - sys.exit(0) + saved_directory = os.getcwd() + try: + os.chdir(directory) + with ServerClass(server_address, HandlerClass) as httpd: + sa = httpd.socket.getsockname() + serve_message = "Serving HTTP on {host} port {port} (http://{host}:{port}/) ..." + print(serve_message.format(host=sa[0], port=sa[1])) + try: + httpd.serve_forever() + except KeyboardInterrupt: + print("\nKeyboard interrupt received, exiting.") + sys.exit(0) + finally: + os.chdir(saved_directory) if __name__ == '__main__': parser = argparse.ArgumentParser() @@ -1199,6 +1205,9 @@ parser.add_argument('--bind', '-b', default='', metavar='ADDRESS', help='Specify alternate bind address ' '[default: all interfaces]') + parser.add_argument('--directory', '-d', default=os.getcwd(), + help='Specify alternate directory ' + '[default: current directory]') parser.add_argument('port', action='store', default=8000, type=int, nargs='?', @@ -1208,4 +1217,5 @@ handler_class = CGIHTTPRequestHandler else: handler_class = SimpleHTTPRequestHandler - test(HandlerClass=handler_class, port=args.port, bind=args.bind) + test(HandlerClass=handler_class, port=args.port, bind=args.bind, + directory=args.directory)