Я пытаюсь запустить командный файл в Laravel, который собирается выполнить скрипт на Python. Дело в том, что он работал с самого начала, когда скрипт python выполнял простую задачу: извлечение имени файла CSV-файла из базы данных, а затем сохранение его в текстовом файле. Полученный файл был в общей папке. Но затем, когда я изменил сценарий python для выполнения сценария ACP, ничего не произошло, когда я запустил пакетный файл.
Вот некоторые объяснения того, что я на самом деле пытаюсь сделать:
Сценарий python извлекает имя файла из базы данных, затем запускает процесс ACP.
Пакетный файл, скрипт Python и файл CSV находятся в одном каталоге. Кроме того, имейте в виду, что оба сценария python и batch работают нормально при нормальном выполнении (не из Laravel).
Код пакетного файла [runcript.bat]
@echo off
"python path\python.exe" "script path\pythonScript.py"
PAUSE
Код Python: [PythonScript.py]
#!/usr/bin/env python
import sys
import mysql.connector
import numpy as np
import pandas as pd
#Connect to database
db=mysql.connector.connect(host="localhost",user="root",passwd="",db="databaseName")
#get the filename
cur = db.cursor()
cur.execute("select nom_fichier from posts where used = 'on'")
i = cur.fetchall()
k = str(i)
thefilename = k[3:-4]
#read the file
thefile=pd.read_csv(thefilename)
#Label Encoder
from sklearn.preprocessing import LabelEncoder
lb_make = LabelEncoder()
for i in thefile.head(0):
if (thefile[i].dtypes != 'int64') | (thefile[i].dtypes != 'float64'):
thefile[i] = lb_make.fit_transform(thefile[i])
for i in thefile.head(0):
if (thefile[i].dtypes != 'float64'):
thefile[i] = thefile[i].astype(float)
y_file = pd.DataFrame()
y_file = pd.DataFrame(columns=['target'])
y_file['target'] = thefile['Churn']
thefile = thefile.drop(columns='Churn')
#Fit Data
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
scaler.fit(thefile)
scaled_data = scaler.transform(thefile)
#PCA
from sklearn.decomposition import PCA
pca = PCA(n_components=2)
pca.fit(scaled_data)
x_pca = pca.transform(scaled_data)
#Save result is csv file
np.savetxt("mydataACP.csv", x_pca, delimiter=",")
cur.close()
db.close()
Функция Laravel Controller, которая выполняет командный файл
public function LabelEncoder(){
exec('path\runScript.bat');
}
Просмотр сценария
<a href="{{action('trainingsController@LabelEncoder')}}">ACP</a>
Так что я ожидаю, что это файл "mydataACP.csv" в публичном каталоге. Однако при выполнении командного файла ничего не происходит.