Sie können auch auf der nächsthöheren verfügbaren Port etwas zu tun, wie dies in Python dienen:
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 das gleiche für andere Dienstprogramme tun müssen, es als ein Bash-Skript bequemer sein kann :
#!/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
Set, dass get-free-port
mit dem Namen als ausführbare Datei und Sie können etwas tun:
someprogram --port=$(get-free-port)
Das ist nicht so zuverlässig wie der native Python-Ansatz ist, weil der Bash-Skript den Hafen nicht erfassen - ein anderer Prozess könnte den Port greifen, bevor Ihr Prozess funktioniert (Race Condition) - aber immer noch nützlich genug sein kann, wenn ein Dienstprogramm dass nicht über eine Try-versuchen-wieder eigene Herangehensweise.
Tötet den anderen Prozess töten oder diese mit einem anderen Port laufen: 'python -m Simple 8081' – Blender