From: Senthil Kumaran Date: Sun, 3 Jun 2012 08:15:54 +0000 (+0800) Subject: Issue 14989: http.server --cgi option can enable the CGI http server. X-Git-Tag: v3.3.0b1~297 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=1251fafcc57091d952bb1cc9b1e1a77f39c59b7b;p=python Issue 14989: http.server --cgi option can enable the CGI http server. --- diff --git a/Doc/library/http.server.rst b/Doc/library/http.server.rst index d947ed2a5b..04ec746e2d 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 cb66f2b63c..c4ac703d2d 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 b74696981a..e732604ae8 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