You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过本地机器访问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,轻量又容易上手:

  1. 先在EC2上安装Flask:
pip3 install flask
  1. 把你的脚本改成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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 07:13:14