Laravel 怎么调用 Python 运行结果

在 web 开发中,有些时候我们需要将不同的编程语言结合使用,以便利用它们各自的优点。在 PHP 和 Python 的结合中,Laravel 是 PHP 中极其流行的框架,而 Python 则广泛用于数据处理和机器学习等领域。本文将介绍如何在 Laravel 中调用 Python 程序,并获取其运行结果。

1. 使用命令行调用 Python 脚本

最简单的方法是通过 PHP 的 execshell_exec 或者 system 函数调用 Python 脚本。我们需要确保系统中安装了 Python,并且可以在命令行中调用。

1.1 简单的 Python 脚本

首先,创建一个简单的 Python 脚本 script.py,它接受参数,并输出计算结果。

# script.py

import sys

def main():
    # 从命令行参数中获取两个数相加
    if len(sys.argv) != 3:
        print("Usage: python script.py num1 num2")
        return
    
    num1 = float(sys.argv[1])
    num2 = float(sys.argv[2])
    result = num1 + num2
    print(result)

if __name__ == "__main__":
    main()

1.2 在 Laravel 中调用 Python 脚本

在 Laravel 控制器中,我们可以使用 shell_exec 函数调用 Python 脚本。

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class PythonController extends Controller
{
    public function addNumbers(Request $request)
    {
        // 从请求中获取参数
        $num1 = $request->input('num1');
        $num2 = $request->input('num2');

        // 调用 Python 脚本
        $command = escapeshellcmd("python3 path/to/script.py $num1 $num2");
        $output = shell_exec($command);

        return response()->json(['result' => $output]);
    }
}

2. 处理中文字符与文件交互

如果传递中文字符或者需要与文件进行交互,我们推荐使用文件作为数据交换的媒介。

2.1 Python 脚本使用文件输入输出

修改 script.py 来读取文件并写入结果:

# script.py

import sys

def main():
    if len(sys.argv) != 2:
        print("Usage: python script.py input_file")
        return
    
    input_file = sys.argv[1]

    with open(input_file, 'r') as f:
        data = f.readlines()

    num1, num2 = map(float, data)
    result = num1 + num2

    with open('output.txt', 'w') as f:
        f.write(str(result))

if __name__ == "__main__":
    main()

2.2 Laravel 读取与写入文件

在 Laravel 中,我们可以将数值写入临时文件中,然后调用脚本。

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\File;

class PythonController extends Controller
{
    public function addNumbers(Request $request)
    {
        $num1 = $request->input('num1');
        $num2 = $request->input('num2');

        File::put('input.txt', "$num1\n$num2");

        $command = escapeshellcmd("python3 path/to/script.py input.txt");
        shell_exec($command);

        $result = File::get('output.txt');

        return response()->json(['result' => $result]);
    }
}

3. 连接与访问关系

在 Laravel 和 Python 之间的交互并不是一对一的关系。为了让内容更直观,我们使用 ER 图和饼图来展示。我们可以利用 Mermaid.js 来描述他们的关系。

3.1 ER 图

erDiagram
    USER {
        string name
        string email
    }
    PYTHON_SCRIPT {
        string path
        string output
    }
    USER ||--o{ PYTHON_SCRIPT : calls

3.2 饼图

在这个场景中,我们假设我们记录了 Python 调用的频率,可以用饼图表示不同功能的调用比重。

pie
    title Python 运行结果调用比例
    "数学运算": 40
    "数据处理": 30
    "机器学习": 20
    "图像处理": 10

结论

以上介绍了如何在 Laravel 应用中调用 Python 脚本并处理结果。你可以简单地通过命令行调用,或者使用文件进行数据交换。不管你使用的是哪种方法,都能够为你的项目带来灵活性和强大的功能。结合使用 Laravel 和 Python,能够更好地利用两者的特点,提升开发效率和应用性能。希望这个指南能帮助你顺利实现跨语言的功能调用!