如何在Flask Python代码中获取服务器的IP和端口
问题解答
可行,以下是两种可靠的实现方式,能满足你在服务器启动时打印监听地址的需求:
方法一:利用Flask服务器启动信号(推荐)
Flask提供了server_started信号,会在开发服务器启动完成后触发,我们可以通过订阅这个信号来获取服务器实际监听的IP和端口:
# File name: app.py from flask import Flask from flask.signals import server_started app = Flask(__name__) @app.route("/") def hello_world(): return "<p>Hello, World!</p>" def print_server_address(sender, **extra): # 从信号参数中获取服务器的监听地址 host, port = extra['server'].server_address print(f"your server is running at: http://{host}:{port}") # 为当前Flask应用绑定信号处理函数 server_started.connect(print_server_address, app)
注意事项
- 该方式依赖
blinker库,如果你的环境未安装,执行pip install blinker即可。 - 打印内容会自动出现在Werkzeug默认输出之前,完全匹配你期望的效果。
方法二:解析命令行参数(轻量方案)
如果你不想引入额外依赖,可以直接解析flask run命令传入的参数,提取host和port:
# File name: app.py from flask import Flask import sys app = Flask(__name__) @app.route("/") def hello_world(): return "<p>Hello, World!</p>" # 设置Flask默认的host和port host = "127.0.0.1" port = 5000 # 解析命令行参数 args = sys.argv[1:] index = 0 while index < len(args): if args[index] == "--host" and index + 1 < len(args): host = args[index + 1] index += 2 elif args[index] == "--port" and index + 1 < len(args): port = args[index + 1] index += 2 else: index += 1 print(f"your server is running at: http://{host}:{port}")
局限性
- 仅支持
--host和--port的长参数格式,无法处理-h、-p等短参数,或--host=xxx的赋值格式。
内容的提问来源于stack exchange,提问作者Eric Stdlib
相关产品推荐
相关产品推荐

