Vous pouvez également servir sur le port disponible juste supérieur en faisant quelque chose comme ceci en Python:
import SimpleHTTPServer
import SocketServer
Handler = SimpleHTTPServer.SimpleHTTPRequestHandler
port = 8000
while True:
try:
httpd = SocketServer.TCPServer(('', port), Handler)
print 'Servir sur le port', port
httpd.serve_forever()
except SocketServer.socket.error as exc:
if exc.args[0] != 48:
raise
print 'Le port', port, 'est déjà utilisé'
port += 1
else:
break
Si vous devez faire la même chose pour d'autres utilitaires, cela peut être plus pratique en tant que 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
Configurez-le en tant qu'exécutable avec le nom get-free-port
et vous pouvez faire quelque chose comme ceci:
someprogram --port=$(get-free-port)
Ce n'est pas aussi fiable que l'approche native Python car le script bash ne capture pas le port -- un autre processus pourrait saisir le port avant que votre processus ne le fasse (condition de concurrence) -- mais cela peut toujours être suffisamment utile lors de l'utilisation d'un utilitaire qui n'a pas sa propre approche de réessai.