Mit Python lässt sich sehr einfach ein kleiner Server programmieren, der nach dem Aufruf die Dokumente des aktuellen Verzeichnisses (und darunter) über das Netz bereitstellt.
Das kann praktisch sein, wenn man mal eben auf einem anderen Rechner eine Datei braucht, aber man keine Lust hat, erst Samba oder einen "großen" Server wie Apache zu konfigurieren. Diesen Ad-hoc-Server mit Python braucht man überhaupt nicht zu konfigurieren, sondern braucht ihn nur aufzurufen, und los geht's. Ich habe diesen Server z.B. genutzt, um auf einem anderen Rechner OpenBSD zu installieren mit den Dateien, die ich mir per FTP von deren Server auf die Workstation runtergeladen habe.
Um diesen Server zu nutzen, einfach den Code (s.u.) in eine Datei mit dem Namen "serve-from-here.py" kopieren, diese dann ausführbar machen:
> chmod +x serve-from-here.py Server version: SimpleHTTP/0.6 Your Server is running on: http://localhost:8000/ and serving files from: /home/peer/ad-hoc-server and below. To stop the server, type ^C.
und ausführen:
> ./serve-from-here.py
Es ist dazu nicht nötig, root zu sein! Wenn man am Ende der Zeile ein "&" anhängt, läuft der Server im Hintergrund:
> ./serve-from-here.py &
Standardmäßig lauscht dieser Server an Port 8000. Der Aufruf der Webseiten erfolgt also über den Link: http://localhost:8000/ (sofern der Webbrowser auf demselben Rechner läuft wie der Server - andernfalls muss statt "localhost" die IP bzw. der Name des entsprechenden Rechners angegeben werden; ähnlich muss auch der Port geändert werden, wenn beim Aufrufen des Servers ein anderer Port als Parameter genannt wurde, s.u.).
Es können zwei Argumente übergeben werden. Als erstes Argument (und nur dort!) kann ein anderer Port angegeben werden, falls der Port 8000 schon in Gebrauch ist (in diesem Fall bricht der Server mit folgender Fehlermeldung ab: "socket.error: (98, 'Address already in use')"). So kann man auf einem Rechner also auch mehrere Server gleichzeitig starten. die dann z.B. auf den Ports 8000, 8001, 8002, 8003, 8004 usw. Verbindungen annehmen. Beispiel:
> ./serve-from-here.py 8001
Außerdem kann an beliebiger Stelle das Argument "b" angegeben werden. In diesem Fall versucht das Programm, einen Webbrowser zu starten, der dann gleich die URL mit dem richtigen Port aufruft. So sieht man dann gleich, was der Server liefert, und braucht nicht extra ein Browserfenster zu öffnen und den URL einzutippen. Beispiel:
> ./serve-from-here.py b
oder auch:
> ./serve-from-here.py 8001 b
Hier nun der Code (oder als Datei):
#!/usr/bin/python
import BaseHTTPServer, SimpleHTTPServer
import os
import sys
def run(server_class=BaseHTTPServer.HTTPServer,
handler_class=SimpleHTTPServer.SimpleHTTPRequestHandler):
print 'Server version:',handler_class.server_version
port=8000
if len(sys.argv)>1:
if sys.argv[1].isdigit():
port=int(sys.argv[1])
server_address = ('', port)
httpd = server_class(server_address, handler_class)
myurl='http://localhost:'+str(server_address[1])+'/'
print 'Your Server is running on:',myurl
print 'and serving files from:',os.getcwd(),'and below.'
print 'To stop the server, type ^C.'
if 'b' in sys.argv:
print 'Trying to start webbrowser...'
import webbrowser
webbrowser.open(myurl)
httpd.serve_forever()
run()
Es gibt auch eine zweite Version, die sogar CGIs ausführen kann. Da dies etwas für Leute ist, die sich mit sowas auskennen, wird diese Version hier nicht weiter beschrieben. Ein Package, das die beiden Versionen, diese Beschreibung und eine Test-Datei enthält, gibt es hier.