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

如何通过jQuery与PHP获取Python脚本实时值,实现网页动态显示温度?

解决树莓派网页实时显示温度的问题

我来帮你搞定这个实时温度显示的问题,咱们先拆解下你遇到的两个核心问题,再一步步解决:

问题根源分析

  1. 前端定时器只拿到一次温度:你可能是在页面加载时仅请求了一次温度数据,之后的定时器循环只是重复使用第一次的结果,并没有重新向服务器发起请求获取最新值。而且前端浏览器本身没法直接执行服务器上的Python脚本,所以循环里的console.log能正常输出,但温度不会更新。
  2. PHP脚本仅刷新时运行:PHP是服务器端脚本,只有当浏览器主动请求页面(比如刷新)时才会执行,它没法主动推送数据给前端,所以得靠前端主动“询问”服务器要最新温度。

具体解决方案

1. 前端用AJAX轮询获取最新温度

修改你的前端代码,让定时器每隔5秒就向服务器发起一次请求,拿到最新温度后更新页面显示。这里用原生JavaScript的fetch API来实现:

// 定义获取温度并更新页面的函数
function updateTemperature() {
  // 请求后端的温度接口
  fetch('get_temp.php')
    .then(response => {
      if (!response.ok) {
        throw new Error('请求失败');
      }
      return response.text();
    })
    .then(tempValue => {
      console.log('最新温度:', tempValue);
      // 把温度显示到页面的指定元素里,比如你有个id为temp-display的元素
      document.getElementById('temp-display').textContent = `当前温度: ${tempValue} °C`;
    })
    .catch(error => {
      console.error('获取温度出错:', error);
    });
}

// 页面加载完成后先执行一次,然后每5秒自动更新
window.onload = function() {
  updateTemperature();
  setInterval(updateTemperature, 5000);
};

2. 后端写一个专门的温度接口(get_temp.php)

这个PHP脚本负责调用你的Python脚本获取温度,或者直接从MySQL里读取最新的温度记录(看你Python脚本的逻辑):

方式1:直接调用Python脚本返回温度

如果你的31856.py脚本是直接输出温度值(比如print(temp)),可以用这个方式:

<?php
// 调用Python脚本并获取输出
$temperature = shell_exec('sudo python /var/www/html/31856.py');
// 清理输出内容,去掉多余的换行、空格
$temperature = trim($temperature);
// 返回温度值给前端
echo $temperature;
?>

方式2:从MySQL读取最新温度

如果你的Python脚本是把温度写入MySQL表,那直接查数据库效率更高:

<?php
// 连接数据库(替换成你的数据库信息)
$dbHost = 'localhost';
$dbUser = '你的数据库用户名';
$dbPass = '你的数据库密码';
$dbName = '你的数据库名';

$conn = mysqli_connect($dbHost, $dbUser, $dbPass, $dbName);
if (!$conn) {
  die('数据库连接失败: ' . mysqli_connect_error());
}

// 查询最新的温度记录
$query = "SELECT temperature FROM 你的温度表名 ORDER BY 时间戳字段 DESC LIMIT 1";
$result = mysqli_query($conn, $query);

if ($row = mysqli_fetch_assoc($result)) {
  echo $row['temperature'];
} else {
  echo '暂无数据';
}

mysqli_close($conn);
?>

3. 解决sudo执行Python脚本的权限问题

默认情况下,网页服务器的运行用户(比如www-data)没有sudo权限,所以直接用sudo会执行失败。你需要给www-data授权:

  1. 执行sudo visudo打开sudo配置文件
  2. 在文件末尾添加一行(注意替换成你的Python脚本路径):
    www-data ALL=(ALL) NOPASSWD: /usr/bin/python /var/www/html/31856.py
    
  3. 保存退出(按Ctrl+X,然后Y确认,回车)

这样www-data用户就能无需密码执行这个Python脚本了。

为什么之前的方法没用?

  • 你之前尝试在前端循环里执行Python脚本是行不通的,前端浏览器运行在客户端,没法直接操作服务器上的文件或脚本;
  • PHP的shell_exec只有在页面被请求时才会触发,刷新页面就是发起一次新请求,而前端轮询就是让浏览器自动定时发起请求,从而实现实时更新。

内容的提问来源于stack exchange,提问作者IyaSheep

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:21:08