首页  >  问答  >  正文

在 PHP 中运行 python 脚本(添加到 Pandas df 并保存文件)

当用户选择 xlsx 文件并通过 POST 提交时,我想获取该文件,将其放入 pandas df 中,进行一些数据清理/格式化,然后将其作为可下载的 csv 发送回浏览器。

我已经让 python/pandas 脚本正常工作了。 我已经能够成功地将一个简单的 $PHP 变量(文件名)传递给 Python 脚本,在 Python 中打印出来,然后在 PHP 中回显它。 ...但我无法运行 Python 脚本的其余部分(pandas 部分)。就好像我的脚本的其余部分不存在一样。

我正在做的是:

  1. 将临时提交的文件从 $_FILES 移动到另一个名为“uploads”的文件夹(同一目录)。
  2. 获取新保存文件的路径。
  3. 将其传递到 Python 脚本中并将格式化文件保存到上传/完成 - 我认为这是我在某处失败的地方

(我还没有弄清楚如何将文件发送回浏览器的部分 - 只是尝试先获取文件)。

我在 htdocs 文件夹中安装了 python venv,并且它已激活。

我的 PHP:

$fname = $_FILES["upload"]["tmp_name"];
$upload_path = 'uploads/' . $fname;

$output = shell_exec('/Applications/MAMP/htdocs/venv/bin/python3 /Applications/MAMP/htdocs/data_cleanse.py ' . $upload_path);
echo $output;

我的Python可以工作:

import sys
print("Variable passed to Python is: " + sys.argv[1])

我的 Python 不会做任何事情(当我使用常规文件名子 sys.argv[1] 时有效):

import sys
import pandas as pd

uploaded_file = sys.argv[1]

df = pd.read_excel(uploaded_file)
df.to_csv('uploads/completed/completed_doc.csv')

我还没有尝试将 df 打印到 PHP。我只是想看看是否可以生成 csv 文件。

我尝试了 escapeshellcmd 和系统,但没有成功。我在这里读到了一个非常相似的问题,其中提到了 chmod 777 用于设置权限。我这样做是为了更改权限,现在我的文件夹可供所有人读写,但它仍然无法运行。

我很困惑,因为除了 pandas 部分之外,一切似乎都运行良好并且连接良好。有人可以帮忙吗?我是 PHP 新手,非常感谢它。

P粉536532781P粉536532781229 天前459

全部回复(1)我来回复

  • P粉488464731

    P粉4884647312024-03-28 17:43:57

    听起来你很接近。 问题在于 PHP 是在服务器端处理的,因此如果您希望 POST 返回网页代码,请发送回 HTML,因为 PHP 是用于在服务器端生成 HTML 的。

    如果您的服务器上有 PHP 引擎,则可以保存 PHP 服务器端,并在 POST 响应中返回指向新创建的 PHP 页面的公共链接。

    回复
    0
  • 取消回复