Bạn cũng có thể phục vụ trên cổng làm một cái gì đó cao nhất kế tiếp có sẵn như thế này trong 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
Nếu bạn cần phải làm điều tương tự cho các tiện ích khác, nó có thể thuận tiện hơn như một kịch bản 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
thiết lập khả năng như một thực thi với tên get-free-port
và bạn có thể làm một cái gì đó như thế này:
someprogram --port=$(get-free-port)
Điều đó không đáng tin cậy như phương pháp Python nguyên gốc bởi vì tập lệnh bash không chiếm cổng - một quá trình khác có thể lấy cổng trước khi quá trình của bạn thực hiện (điều kiện chủng tộc) - nhưng vẫn đủ hữu ích khi sử dụng tiện ích không có cách tiếp cận thử lại lần nữa.
Nguồn
2015-09-21 14:31:06
Giết quá trình khác hoặc chạy cái này với cổng khác: 'python -m SimpleHTTPServer 8081' – Blender