Laravel php使用exec()调用python脚本进行交互

Laravel php使用exec()调用python脚本进行交互

一、准备工作:

  1. 准备一个待交互的test.py(python的文件名大家自定义,我这里就叫test.py)的python文件。
  2. 在laravel框架中创建一个php控制器和编写访问该控制器的路由。
  3. 将test.py文件放在laravel 框架中的 public 目录下。

二、开始测试:

  1. php代码示例:
<?php

namespace App\Http\Controllers\V1_2;

use App\Models\Collection;

class Test extends Controller
{

    public function testA(){
//        exec('python3 /root/space/space.py aaa bbb 2>&1',$out,$status);//标准写法
		$num1 = 5;//传递给python的参数1
		$num2 = 3;//传递给python的参数2
		//exec('python pytest/space.py 2>&1',$out,$status);//如果你是python2的运行环境就用这句。
		//我的python文件位置在laravel框架中的.\publi\pytest\space.py;
		#这里注意在‘python3 pytest/space.py 2>&1’ 的结尾 “2>&1” 没有这句话,打印的时候你是看不到报错的!!! 
		#将2和重定向 到1可以使用:2>&1 用来打印数据或错误信息。
        exec("python3 pytest/space.py {$num1} {$num2} 2>&1",$out,$status);//如果你是python3的运行环境就用这句
        print_r($out);//打印后输出   Array ( [0] => hello world 5and3)
        print_r($status);
        //打印$status后输出显示
        //0:标准输入 STDIN_FILENO 
        //1:标准输出 STDOUT_FILENO  
        //2:标准错误 STDERR_FILENO
    }
}

测试结果展示

1.实测代码截图:
在这里插入图片描述
2.返回结果截图
在这里插入图片描述

总结:

这里特别注意的就是php的exec()函数的使用
1.可能因为安全模式被禁用,这里需要你自行在php配置中解除此函数的禁用(解除禁用后可能存在安全风险)。
2.exec(参数1,参数2,参数3);
参数1:需要执行的语句 string型
参数2:执行语句后接收返回结果的变量 array型
参数3:执行与与语句后接收返回结果状态码的变量 int型

  • 参数1 的结尾 ‘2>&1’没有这句话无法显示报错信息。

  • 参数3的返回值是int型,分别表示:
    0:标准输入 STDIN_FILENO
    1:标准输出 STDOUT_FILENO
    2:标准错误 STDERR_FILENO
    将2和重定向到1可以使用:2>&1
    exec(command+’" 2>&1",$res);

    print_r($res);//这样就可以看到标准错误流的内容了。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要在 MySQL 触发器中调用 Python 脚本,你可以使用以下步骤: 1. 在 MySQL 中创建一个触发器,以便在特定事件发生时触发执行 Python 脚本。 2. 在 Python 中编写脚本,以便执行所需的操作。你可以使用 Python 的 MySQL 连接库(如 PyMySQL)与 MySQL 进行交互。 3. 在触发器中调用 Python 脚本,可以通过 shell 命令调用 Python 解释器来实现。例如,在 Linux 系统上,你可以使用以下命令: ``` `/usr/bin/python /path/to/your/python/script.py` ``` 4. 将该命令作为 MySQL 触发器中的 shell 命令调用即可。 需要注意的是,如果你的 Python 脚本需要接收参数,你需要在触发器中将这些参数传递给 shell 命令。可以使用 MySQL 的 `CONCAT()` 函数将参数拼接成字符串,然后在 shell 命令中解析这个字符串。 示例代码如下: ```mysql CREATE TRIGGER `my_trigger` AFTER INSERT ON `my_table` FOR EACH ROW BEGIN SET @args = CONCAT('arg1', ' ', 'arg2', ' ', NEW.`column`); SET @cmd = CONCAT('/usr/bin/python /path/to/your/python/script.py', ' ', @args); SET @result = sys_exec(@cmd); END; ``` 在这个示例中,我们创建了一个名为 `my_trigger` 的触发器,它会在 `my_table` 表中插入新行后触发。在触发器中,我们使用 `CONCAT()` 函数将三个参数拼接成字符串,并将其存储在变量 `@args` 中。然后,我们使用 `CONCAT()` 函数将 Python 解释器路径和脚本路径与 `@args` 拼接起来,存储在变量 `@cmd` 中。最后,我们调用 MySQL 的 `sys_exec()` 函数来执行 shell 命令并将结果存储在变量 `@result` 中。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值