Wenn Sie die Quelle lesen, werden Sie feststellen, dass nur der Port in der Befehlszeile überschrieben werden kann. Wenn Sie den Host ändern möchten, auf dem er bereitgestellt wird, müssen Sie die test()
Methode des SimpleHTTPServer
und implementierenBaseHTTPServer
selbst . Das sollte aber wirklich einfach sein.
So geht's ganz einfach:
import sys
from SimpleHTTPServer import SimpleHTTPRequestHandler
import BaseHTTPServer
def test(HandlerClass=SimpleHTTPRequestHandler,
ServerClass=BaseHTTPServer.HTTPServer):
protocol = "HTTP/1.0"
host = ''
port = 8000
if len(sys.argv) > 1:
arg = sys.argv[1]
if ':' in arg:
host, port = arg.split(':')
port = int(port)
else:
try:
port = int(sys.argv[1])
except:
host = sys.argv[1]
server_address = (host, port)
HandlerClass.protocol_version = protocol
httpd = ServerClass(server_address, HandlerClass)
sa = httpd.socket.getsockname()
print "Serving HTTP on", sa[0], "port", sa[1], "..."
httpd.serve_forever()
if __name__ == "__main__":
test()
Und um es zu benutzen:
> python server.py 127.0.0.1
Serving HTTP on 127.0.0.1 port 8000 ...
> python server.py 127.0.0.1:9000
Serving HTTP on 127.0.0.1 port 9000 ...
> python server.py 8080
Serving HTTP on 0.0.0.0 port 8080 ...
http.server
Binden ermöglicht, z. B.python3 -m http.server --bind 127.0.0.1 8000
würde ausreichenSimpleHTTPServer
ist Single-Threading und blockiert, was bedeutet, dass Sie keine weitere Anforderung ausführen können, bis die vorherige Anforderung beendet ist. Und es gibt keine Bereichsunterstützung, z. B. zum Streamen / Suchen einer Mediendatei von einer bestimmten Position. Eine bessere Alternative isttwisted
(pip install twisted
), mit der Sie ausführen könnentwistd -n web --path /
. Es kann auch anonymes FTP mit tuntwistd -n ftp -p 2121 -r /
. Weitere Einzeiler für http-Server: gist.github.com/willurd/5720255 .