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

Web界面中PHP无法执行Python脚本生成CSV文件的求助

解决PHP无法调用Python脚本生成CSV的问题

问题分析

核心问题是PHP通过shell_exec调用Python脚本失败,虽然脚本单独运行正常,但Web环境下存在参数传递错误、环境路径差异、权限限制三类常见问题,下面逐一排查解决:


1. 修复Python脚本的参数接收逻辑

你的Python脚本未正确接收PHP传递的日期参数,导致文件名错误且无法生成预期文件。修改mediciones.py:

import serial
import csv
import sys

# 检查是否传入日期参数
if len(sys.argv) < 2:
    print("错误:缺少日期参数")
    sys.exit(1)

# 接收PHP传递的日期参数
fecha_actual = sys.argv[1]
csv_file = f"{fecha_actual}.csv"

i = 0
try:
    ser = serial.Serial('/dev/ttyACM0', 115200)  
    with open(csv_file, 'w', newline='\n') as file:
        writer = csv.writer(file)
        while i < 500:
            try:
                raw = ser.readline().decode().strip()  
                values = raw.split(',')
                writer.writerow([values[0], values[1]])
                i += 1
            except Exception as e:
                print(f'读取数据错误: {e}')
                break
    ser.close()
    print(f"文件 {csv_file} 生成成功,共写入 {i} 条数据")
except Exception as e:
    print(f"初始化失败: {e}")

2. 修正PHP的执行命令

2.1 明确Python路径

树莓派默认python指向Python2,而你的脚本依赖Python3的serial模块,必须用python3调用。先在终端执行which python3获取绝对路径(比如/usr/bin/python3),替换到PHP代码中。

2.2 使用绝对路径调用脚本

避免相对路径找不到脚本,直接写入Python脚本的绝对路径(比如/var/www/html/mediciones.py)。

2.3 捕获错误输出

shell_exec默认只返回标准输出,重定向错误输出到标准输出,方便排查问题。

修改crear_csv.php中的执行代码:

<?php
if(isset($_POST['crear_csv'])) {
    $fecha_actual = date("Y-m-d");
    // 替换为你的Python3绝对路径和脚本绝对路径
    $python_path = "/usr/bin/python3";
    $script_path = "/var/www/html/mediciones.py";
    // 执行命令并捕获所有输出(包括错误)
    $output = shell_exec("$python_path $script_path $fecha_actual 2>&1");
    echo "<pre>$output</pre>";
}
?>

3. 解决权限问题

Web服务器用户(通常是www-data)默认没有串口访问权限和文件写入权限:

3.1 给www-data添加串口权限

终端执行:

sudo usermod -a -G dialout www-data

3.2 确保Web目录可写入

给网站根目录添加写入权限:

sudo chown www-data:www-data /var/www/html
sudo chmod 755 /var/www/html

3.3 重启Web服务器

使权限生效:

# Apache用户执行
sudo systemctl restart apache2
# Nginx用户执行
sudo systemctl restart nginx

4. 测试验证

  1. 点击界面按钮,查看PHP输出的内容,若有错误信息可针对性排查。
  2. 检查Web目录下是否生成了以当日日期命名的CSV文件。
  3. 若仍有问题,可先在PHP中执行echo shell_exec("whoami");确认当前用户是否为www-data,再执行echo shell_exec("$python_path --version");确认Python版本是否正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 15:55:09