Heim  >  Fragen und Antworten  >  Hauptteil

Python-Skript in PHP ausführen (zu Pandas df hinzufügen und Datei speichern)

Wenn der Benutzer eine XLSX-Datei auswählt und sie per POST sendet, möchte ich die Datei nehmen, sie in eine Pandas-DF einfügen, einige Daten bereinigen/formatieren und sie dann als herunterladbare CSV-Datei an den Browser zurücksenden.

Bei mir funktioniert das Python/Pandas-Skript einwandfrei. Ich konnte erfolgreich eine einfache $PHP-Variable (den Dateinamen) an ein Python-Skript übergeben, sie in Python ausdrucken und sie dann in PHP zurückgeben. ...aber ich kann den Rest des Python-Skripts (den Pandas-Teil) nicht ausführen. Es ist, als ob der Rest meines Skripts nicht existiert.

Was ich mache ist:

  1. Verschieben Sie die vorübergehend übertragenen Dateien von $_FILES in einen anderen Ordner namens „uploads“ (dasselbe Verzeichnis).
  2. Ermitteln Sie den Pfad der neuen gespeicherten Datei.
  3. Übergeben Sie dies in ein Python-Skript und speichern Sie die formatierte Datei zum Hochladen/Fertigstellen – Ich glaube, hier habe ich irgendwo versagt

(Ich habe den Teil, wie man die Datei zurück an den Browser sendet, noch nicht herausgefunden – ich versuche nur, zuerst die Datei abzurufen).

Ich habe Python Venv im Ordner htdocs installiert und es ist aktiviert.

Mein 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;

Mein Python funktioniert:

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

Mein Python macht nichts (funktioniert, wenn ich den regulären Dateinamen sub sys.argv[1] verwende):

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')

Ich habe noch nicht versucht, df in PHP zu drucken. Ich möchte nur sehen, ob ich eine CSV-Datei generieren kann.

Ich habe es mit escapeshellcmd und system versucht, ohne Erfolg. Ich habe hier eine sehr ähnliche Frage gelesen, in der chmod 777 zum Festlegen von Berechtigungen erwähnt wurde. Ich habe dies getan, um die Berechtigungen zu ändern, und jetzt ist mein Ordner für alle lesbar und beschreibbar, aber es funktioniert immer noch nicht.

Ich bin verwirrt, weil bis auf den Pandas-Teil alles gut zu funktionieren und miteinander verbunden zu sein scheint. Kann jemand helfen? Ich bin PHP-Neuling und weiß es wirklich zu schätzen.

P粉536532781P粉536532781179 Tage vor379

Antworte allen(1)Ich werde antworten

  • P粉488464731

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

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

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

    Antwort
    0
  • StornierenAntwort