También puede servir en el siguiente puerto más alto disponible haciendo algo como esto en Python:
import SimpleHTTPServer
import SocketServer
Handler = SimpleHTTPServer.SimpleHTTPRequestHandler
port = 8000
while True:
try:
httpd = SocketServer.TCPServer(('', port), Handler)
print 'Serving on port', port
httpd.serve_forever()
except SocketServer.socket.error as exc:
if exc.args[0] != 48:
raise
print 'Port', port, 'already in use'
port += 1
else:
break
Si necesita hacer lo mismo para otras utilidades, puede ser más conveniente como un script bash:
#!/usr/bin/env bash
MIN_PORT=${1:-1025}
MAX_PORT=${2:-65535}
(netstat -atn | awk '{printf "%s\n%s\n", $4, $4}' | grep -oE '[0-9]*$'; seq "$MIN_PORT" "$MAX_PORT") | sort -R | head -n 1
Configure eso como un ejecutable con el nombre get-free-port
y puede hacer algo como esto:
someprogram --port=$(get-free-port)
Eso no es tan confiable como el enfoque nativo de Python porque el script bash no captura el puerto, otro proceso podría tomar el puerto antes de que lo haga su proceso (condición de carrera), pero aún puede ser lo suficientemente útil cuando se utiliza una utilidad que no No tiene un enfoque de prueba-prueba-otra vez.
python -m SimpleHTTPServer 8081