使用 Laravel 执行 Python 脚本?

Raf*_*elM 6 symfony python-3.x laravel

我正在尝试在 Laravel 5.8 项目中执行 python 脚本,但我在使用 Symfony/process 类时遇到问题。

基本上,我想运行这个 python 脚本,它从存储文件夹中获取一个 excel 表单。

我的第一次尝试是这个

$process = new Process('C:\Python\python.exe C:\Users\"my path"\laravel\storage\app\images\cargaExcel.py');

$process->run();

if (!$process->isSuccessful()) {
    throw new ProcessFailedException($process);
}

echo $process->getOutput();
Run Code Online (Sandbox Code Playgroud)

错误是

Fatal Python error: _Py_HashRandomization_Init: failed to get random numbers to initialize Python
Run Code Online (Sandbox Code Playgroud)

我也试过shell_exec(), 如果这两个文件(excel 和 python 脚本在公共路径 - app/public 中)它可以工作。

我认为问题是python只在app/public文件夹上执行,所以我不知道如何在另一个路径中运行它。

Python 输出告诉我:

Working directory: C:\Users\"my path"\laravel\public
Run Code Online (Sandbox Code Playgroud)

有谁知道如何运行这个?

小智 1

您可以将工作目录作为进程类的第二个参数传递

所以它可以是:

$process = new Process('C:\Python\python.exe C:\Users\"my path"\laravel\storage\app\images\cargaExcel.py', "/my/working/path/");
Run Code Online (Sandbox Code Playgroud)

您也可以将命令作为数组传递

$process = new Process(['C:\Python\python.exe', 'C:\Users\"my path"\laravel\storage\app\images\cargaExcel.py'], "/my/working/path/");
Run Code Online (Sandbox Code Playgroud)