如何通过本地机器访问EC2实例中Python脚本生成的网页?
如何通过本地机器访问EC2实例中Python脚本生成的网页?
首先咱们得先理清两个核心问题:你的脚本目前只是在终端输出HTML内容,并没有启动一个能对外提供HTTP服务的web服务器;另外脚本里的数据库查询逻辑也有小问题,导致你拿不到两张表的完整数据。咱们一步步来解决:
第一步:修复脚本中的数据获取逻辑
你现在的脚本执行完第一个查询后就关闭了连接,而且没有保存查询结果;之后执行第二个查询,用同一个游标循环两次——但游标在第一次循环后就已经走到结果末尾了,第二次循环肯定拿不到数据。修改成这样:
import mysql.connector # 先获取两张表的数据 host = "localhost" username = "DBUser" password = "DBUserPassword" dbname = "IoTSchema" # 获取iot_sensors表数据 conn = mysql.connector.connect(host=host, user=username, password=password, database=dbname) cursor = conn.cursor() cursor.execute("SELECT * FROM iot_sensors") sensors_data = cursor.fetchall() # 把结果全部取出来保存 conn.close() # 获取appliances表数据 conn = mysql.connector.connect(host=host, user=username, password=password, database=dbname) cursor = conn.cursor() cursor.execute("SELECT * FROM appliances") appliances_data = cursor.fetchall() conn.close()
这样你就把两张表的数据都存在变量里了,后面生成HTML的时候可以分别调用。
第二步:启动一个web服务对外提供页面
单纯打印HTML只能在EC2的终端里看,要让本地能访问,得在EC2上跑一个web服务器。推荐用Flask,轻量又容易上手:
- 先在EC2上安装Flask:
pip3 install flask
- 把你的脚本改成Flask服务的形式,完整代码大概是这样:
from flask import Flask import mysql.connector app = Flask(__name__) @app.route('/') def display_tables(): # 数据库连接和数据获取逻辑 host = "localhost" username = "DBUser" password = "DBUserPassword" dbname = "IoTSchema" # 获取iot_sensors数据 conn = mysql.connector.connect(host=host, user=username, password=password, database=dbname) cursor = conn.cursor() cursor.execute("SELECT * FROM iot_sensors") sensors_data = cursor.fetchall() conn.close() # 获取appliances数据 conn = mysql.connector.connect(host=host, user=username, password=password, database=dbname) cursor = conn.cursor() cursor.execute("SELECT * FROM appliances") appliances_data = cursor.fetchall() conn.close() # 生成HTML内容 html = "<h1>IoT 数据表格</h1>" # 第一张表:iot_sensors html += "<table border='1' cellpadding='8' cellspacing='0'>" html += "<tr><th>传感器ID</th><th>传感器值</th></tr>" # 这里可以换成你实际的列名 for row in sensors_data: html += f"<tr><td>{row[0]}</td><td>{row[1]}</td></tr>" html += "</table><br><br>" # 第二张表:appliances html += "<table border='1' cellpadding='8' cellspacing='0'>" html += "<tr><th>设备ID</th><th>设备状态</th></tr>" # 换成实际列名 for row in appliances_data: html += f"<tr><td>{row[0]}</td><td>{row[1]}</td></tr>" html += "</table>" return html if __name__ == '__main__': # 让服务监听EC2的所有网卡,端口用8080(你也可以用80,需要root权限) app.run(host='0.0.0.0', port=8080, debug=True)
第三步:配置EC2安全组
你说已经开放了所有IP协议,但还是要确认一下入站规则里有没有允许8080端口(或者你用的其他端口)的访问:
- 登录AWS控制台,找到你的EC2实例,进入安全组配置
- 添加一条入站规则:类型选“自定义TCP”,端口范围填8080,来源选“0.0.0.0/0”(如果想更安全,可以填你本地机器的公网IP)
第四步:启动服务并访问
在EC2的终端里运行你的脚本:
python3 your_script_name.py
然后打开本地的浏览器,输入http://<你的EC2公网IP>:8080,就能看到生成的两张表格页面了。
备注:内容来源于stack exchange,提问作者emil03
相关产品推荐
相关产品推荐

