Python'da şu şekilde bir şey yaparak bir sonraki en yüksek bağlantı noktasında da hizmet verebilirsiniz:
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
Diğer yardımcı programlar için aynı şeyi yapmanız gerekiyorsa, bir bash betiği olarak daha uygun olabilir:
#!/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
Bunu adıyla bir yürütülebilir dosya olarak ayarlayın get-free-port
ve böyle bir şey yapabilirsiniz:
someprogram --port=$(get-free-port)
Bu, yerel Python yaklaşımı kadar güvenilir değildir, çünkü bash betiği bağlantı noktasını yakalamaz - başka bir işlem işleminizden önce bağlantı noktasını yakalayabilir (yarış durumu) - ancak yine de yapmayan bir yardımcı program kullanırken yeterince yararlı olabilir. kendi kendine bir yeniden dene yaklaşımına sahip olmak.
python -m SimpleHTTPServer 8081