From 1251fafcc57091d952bb1cc9b1e1a77f39c59b7b Mon Sep 17 00:00:00 2001 From: Senthil Kumaran Date: Sun, 3 Jun 2012 16:15:54 +0800 Subject: Issue 14989: http.server --cgi option can enable the CGI http server. --- Doc/library/http.server.rst | 6 ++++++ Lib/http/server.py | 22 +++++++++++++++------- Misc/NEWS | 3 +++ 3 files changed, 24 insertions(+), 7 deletions(-) diff --git a/Doc/library/http.server.rst b/Doc/library/http.server.rst index d947ed2..04ec746 100644 --- a/Doc/library/http.server.rst +++ b/Doc/library/http.server.rst @@ -400,3 +400,9 @@ the previous example, this serves files relative to the current directory. :: Note that CGI scripts will be run with UID of user nobody, for security reasons. Problems with the CGI script will be translated to error 403. + +:class:`CGIHTTPRequestHandler` can be enabled in the command line by passing +the ``--cgi`` option.:: + + python -m http.server --cgi 8000 + diff --git a/Lib/http/server.py b/Lib/http/server.py index cb66f2b..c4ac703 100644 --- a/Lib/http/server.py +++ b/Lib/http/server.py @@ -100,6 +100,8 @@ import sys import time import urllib.parse import copy +import argparse + # Default error message template DEFAULT_ERROR_MESSAGE = """\ @@ -1173,18 +1175,13 @@ class CGIHTTPRequestHandler(SimpleHTTPRequestHandler): def test(HandlerClass = BaseHTTPRequestHandler, - ServerClass = HTTPServer, protocol="HTTP/1.0"): + ServerClass = HTTPServer, protocol="HTTP/1.0", port=8000): """Test the HTTP request handler class. This runs an HTTP server on port 8000 (or the first command line argument). """ - - if sys.argv[1:]: - port = int(sys.argv[1]) - else: - port = 8000 server_address = ('', port) HandlerClass.protocol_version = protocol @@ -1200,4 +1197,15 @@ def test(HandlerClass = BaseHTTPRequestHandler, sys.exit(0) if __name__ == '__main__': - test(HandlerClass=SimpleHTTPRequestHandler) + parser = argparse.ArgumentParser() + parser.add_argument('--cgi', action='store_true', + help='Run as CGI Server') + parser.add_argument('port', action='store', + default=8000, type=int, + nargs='?', + help='Specify alternate port [default: 8000]') + args = parser.parse_args() + if args.cgi: + test(HandlerClass=CGIHTTPRequestHandler, port=args.port) + else: + test(HandlerClass=SimpleHTTPRequestHandler, port=args.port) diff --git a/Misc/NEWS b/Misc/NEWS index b746969..e732604 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -10,6 +10,9 @@ What's New in Python 3.3.0 Beta 1? Library ------- +- Issue #14989: Make the CGI enable option to http.server available via command + line. + - Issue #14987: Add a missing import statement to inspect. - Issue #1079: email.header.decode_header now correctly parses all the examples -- cgit v0.12