cari

Rumah  >  Soal Jawab  >  teks badan

Jalankan skrip python dalam PHP (tambah pada Pandas df dan simpan fail)

Apabila pengguna memilih fail xlsx dan menyerahkannya melalui POST, saya ingin mengambil fail itu, memasukkannya ke dalam df panda, melakukan pembersihan/pemformatan data, dan kemudian menghantarnya semula ke penyemak imbas sebagai csv yang boleh dimuat turun.

Saya mempunyai skrip python/pandas berfungsi dengan baik. Saya telah berjaya menghantar pembolehubah $PHP mudah (nama fail) kepada skrip Python, mencetaknya dalam Python, dan kemudian menggemakannya semula dalam PHP. ...tetapi saya tidak boleh menjalankan skrip Python yang lain (bahagian panda). Ia seperti skrip saya yang lain tidak wujud.

Apa yang saya lakukan ialah:

  1. Alihkan fail yang dilakukan sementara daripada $_FILES ke folder lain yang dipanggil "muat naik" (direktori yang sama).
  2. Dapatkan laluan fail yang disimpan baharu.
  3. Hantar ini ke dalam skrip Python dan simpan fail yang diformat untuk dimuat naik/selesai - Saya rasa di sinilah saya gagal di suatu tempat

(Saya tidak tahu bahagian tentang cara menghantar semula fail ke penyemak imbas - hanya cuba mendapatkan fail dahulu).

Saya memasang python venv dalam folder htdocs dan ia diaktifkan.

PHP saya:

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

Sawa Saya berfungsi:

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

Python saya tidak melakukan apa-apa (berfungsi apabila saya menggunakan nama fail biasa sub 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')

Saya belum cuba mencetak df ke PHP lagi. Saya hanya mahu melihat sama ada saya boleh menjana fail csv.

Saya mencuba escapeshellcmd dan sistem tidak berjaya. Saya membaca soalan yang sangat serupa di sini yang menyebut chmod 777 untuk menetapkan kebenaran. Saya melakukan ini untuk menukar kebenaran dan kini folder saya boleh dibaca dan ditulis oleh semua orang, tetapi ia masih tidak berfungsi.

Saya keliru kerana semuanya kelihatan berfungsi dengan baik dan bersambung kecuali bahagian panda. Ada sesiapa boleh tolong? Saya baru menggunakan PHP dan sangat menghargainya.

P粉536532781P粉536532781231 hari yang lalu462

membalas semua(1)saya akan balas

  • P粉488464731

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

    Bunyi seperti anda dekat. Masalahnya ialah PHP dikendalikan di bahagian pelayan, jadi jika anda mahu POST mengembalikan kod halaman web, hantar balik HTML, kerana PHP digunakan untuk menjana HTML pada bahagian pelayan.

    Jika anda mempunyai enjin PHP pada pelayan anda, anda boleh menyimpan bahagian pelayan PHP dan mengembalikan pautan awam ke halaman PHP yang baru dibuat dalam respons POST.

    balas
    0
  • Batalbalas