Sie können auch auf dem nächsthöheren verfügbaren Port arbeiten und in Python Folgendes tun:
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
Wenn Sie dasselbe für andere Dienstprogramme tun müssen, ist dies möglicherweise praktischer als ein Bash-Skript:
#!/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
Wenn Sie das als ausführbare Datei mit dem Namen get-free-port
einrichten, können Sie Folgendes tun:
someprogram --port=$(get-free-port)
Dies ist nicht so zuverlässig wie der native Python-Ansatz, da das Bash-Skript den Port nicht erfasst - ein anderer Prozess könnte den Port vor Ihrem Prozess abrufen (Race-Bedingung) -, aber dennoch nützlich genug sein kann, wenn Sie ein Dienstprogramm verwenden, das dies nicht tut. Ich habe keinen eigenen Versuch, es noch einmal zu versuchen.
python -m SimpleHTTPServer 8081