您还可以在下一个最高可用端口上提供服务,在 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
如果您需要对其他实用程序执行相同的操作,则作为 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
将其设置为具有名称的可执行文件,get-free-port
您可以执行以下操作:
someprogram --port=$(get-free-port)
这不像本机 Python 方法那样可靠,因为 bash 脚本不会捕获端口——另一个进程可能会在你的进程捕获端口之前(竞争条件)——但在使用没有的实用程序时仍然可能足够有用没有自己的重试方法。