What is the Python 3 equivalent of “python -m SimpleHTTPServer”

后端 未结 6 705
萌比男神i
萌比男神i 2020-11-28 00:19

What is the Python 3 equivalent of python -m SimpleHTTPServer?

相关标签:
6条回答
  • 2020-11-28 00:26

    Using 2to3 utility.

    $ cat try.py
    import SimpleHTTPServer
    
    $ 2to3 try.py
    RefactoringTool: Skipping implicit fixer: buffer
    RefactoringTool: Skipping implicit fixer: idioms
    RefactoringTool: Skipping implicit fixer: set_literal
    RefactoringTool: Skipping implicit fixer: ws_comma
    RefactoringTool: Refactored try.py
    --- try.py  (original)
    +++ try.py  (refactored)
    @@ -1 +1 @@
    -import SimpleHTTPServer
    +import http.server
    RefactoringTool: Files that need to be modified:
    RefactoringTool: try.py
    

    Like many *nix utils, 2to3 accepts stdin if the argument passed is -. Therefore, you can test without creating any files like so:

    $ 2to3 - <<< "import SimpleHTTPServer"
    
    0 讨论(0)
  • 2020-11-28 00:29

    The equivalent is:

    python3 -m http.server
    
    0 讨论(0)
  • 2020-11-28 00:29

    In one of my projects I run tests against Python 2 and 3. For that I wrote a small script which starts a local server independently:

    $ python -m $(python -c 'import sys; print("http.server" if sys.version_info[:2] > (2,7) else "SimpleHTTPServer")')
    Serving HTTP on 0.0.0.0 port 8000 ...
    

    As an alias:

    $ alias serve="python -m $(python -c 'import sys; print("http.server" if sys.version_info[:2] > (2,7) else "SimpleHTTPServer")')"
    $ serve
    Serving HTTP on 0.0.0.0 port 8000 ...
    

    Please note that I control my Python version via conda environments, because of that I can use python instead of python3 for using Python 3.

    0 讨论(0)
  • 2020-11-28 00:36

    In addition to Petr's answer, if you want to bind to a specific interface instead of all the interfaces you can use -b or --bind flag.

    python -m http.server 8000 --bind 127.0.0.1
    

    The above snippet should do the trick. 8000 is the port number. 80 is used as the standard port for HTTP communications.

    0 讨论(0)
  • 2020-11-28 00:45

    From the docs:

    The SimpleHTTPServer module has been merged into http.server in Python 3.0. The 2to3 tool will automatically adapt imports when converting your sources to 3.0.

    So, your command is python -m http.server, or depending on your installation, it can be:

    python3 -m http.server
    
    0 讨论(0)
  • As everyone has mentioned http.server module is equivalent to python -m SimpleHTTPServer.
    But as a warning from https://docs.python.org/3/library/http.server.html#module-http.server

    Warning: http.server is not recommended for production. It only implements basic security checks.

    Usage

    http.server can also be invoked directly using the -m switch of the interpreter.

    python -m http.server
    

    The above command will run a server by default on port number 8000. You can also give the port number explicitly while running the server

    python -m http.server 9000
    

    The above command will run an HTTP server on port 9000 instead of 8000.

    By default, server binds itself to all interfaces. The option -b/--bind specifies a specific address to which it should bind. Both IPv4 and IPv6 addresses are supported. For example, the following command causes the server to bind to localhost only:

    python -m http.server 8000 --bind 127.0.0.1
    

    or

    python -m http.server 8000 -b 127.0.0.1
    

    Python 3.8 version also supports IPv6 in the bind argument.

    Directory Binding

    By default, server uses the current directory. The option -d/--directory specifies a directory to which it should serve the files. For example, the following command uses a specific directory:

    python -m http.server --directory /tmp/
    

    Directory binding is introduced in python 3.7

    0 讨论(0)
提交回复
热议问题