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);//這樣就可以看到標準錯誤流的內容了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章