Contenido

Python: tu directorio en la web

No hace demasiado que escribí el artículo Python en la web, pero me ha surgido una necesidad y ese mismo artículo me ha echado una mano XD

Resulta que quiero realizar pruebas sobre mi web, para ofrecer más calidad, y he encontrado linkchecker , pero no funciona bien con directorios, ya que no traduce rutas absolutas a rutas relativas y tendría que tener mi web colgando de /.

¿Cuál es la solución? Pues montarme un mini-servidor que pueda lanzar antes de las pruebas y destruir inmediatamente después de éstas.

Python

El programa

Tal y como ya escribí en el artículo Python en la web, Python dispone de las clases SocketServer y SimpleHTTPServer que nos permiten crear un servidor web en dos minutos.

Pero lo que no dije, porque no lo sabía, es que SimpleHTTPServer.SimpleHTTPRequestHandler ya tiene una implementación por defecto que, directamente, sirve el directorio actual.

Dicho de otra manera:

1
2
3
4
5
6
7
8
9
import SimpleHTTPServer
import SocketServer

PORT = 9876

httpd = SocketServer.TCPServer(("", PORT), SimpleHTTPServer.SimpleHTTPRequestHandler)

print "serving at port", PORT
httpd.serve_forever()

Éste es mi pequeño servidor web. Podría decirse que son dos líneas :D

Tras ejecutarlo, el directorio actual se comparte en el puerto indicado. Y es rápido. Muy rápido.

Mejorándolo un poquitín

Claro, yo lo que quiero hacer es lanzar el servidor una vez tras otra, y ese pequeño programita me deja el puerto abierto. Pero es que no hay nada más sencillo:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
import SimpleHTTPServer
import SocketServer

PORT = 9876

httpd = SocketServer.TCPServer(("", PORT), SimpleHTTPServer.SimpleHTTPRequestHandler)

print "serving at port", PORT
try:
    httpd.serve_forever()
finally:
    httpd.shutdown()

Y ya lo tengo funcionando.

Más información

Pues… Admito haber copiado. El programa se encuentra en la propia documentación de SimpleHTTPServer XD

Aún así, espero que os sea de tanta utilidad como a mí.