Laravel でのPython使用について

Laravel でのPython使用について書いてみました。


まず実行する Python ファイルを作成します。

appのディレクトリにPythonのフォルダを新規作成
Pythonフォルダ内にてtest.pyを作成
（app/Python/test.py)
今回は簡単に

```
print('test')
```

と記述します。

続いてphp artisan のコマンドファイルを作成します。
コマンドで
```
php artisan make:command PythonTestCommand
```

app/Console/Commands/PythonTestCommand.php
が作成されたことを確認してください。

最後に先ほど作成したapp/Console/Commands/PythonTestCommand.php内に
Pythonスクリプトを実行するコードを追記します。

```
<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;

class PythonTestCommand extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'app:python-test-command';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Command description';

    /**
     * Execute the console command.
     */
    public function handle()
    {
        //追記ここから
                // Pythonスクリプトを実行するパス
                $pythonScriptPath = base_path('app/Python/test.py');

                // Pythonスクリプトを実行
                $output = null;
                $resultCode = null;
        
                // execを使ってPythonスクリプトを実行
                exec("python3 $pythonScriptPath", $output, $resultCode);
        
                // 実行結果の出力とステータスコードの表示
                if ($resultCode === 0) {
                    $this->info("Python script executed successfully:");
                    $this->line(implode("\n", $output));
                } else {
                    $this->error("Python script failed with result code: $resultCode");
                }
        // 追記ここまで
    }
}
```

コマンドにて
```
php artisan app:python-test-command
```
を実行するとターミナル上に
Python script executed successfully:
test
と表示されます。


ブラウザ上に表示させるには
1.ルートの設定
2.コントローラーの作成
3.Pythonスクリプトの実行
の手順で行います。

1.ルートの設定はroutes/web.phpにルートを追加します。

```
use App\Http\Controllers\PythonTestController;

Route::get('/python-test', [PythonTestController::class, 'runPythonScript']);
```

次に2.コントローラーを作成します。
ターミナルで
```
php artisan make:controller PythonTestController
```

app/Http/Controllers/PythonTestController.phpが作成されます。
ここに3.Pythonスクリプトを実行するコードを追加します。

```
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class PythonTestController extends Controller
{
    //
    public function runPythonScript()
    {
        // Pythonスクリプトのパスを指定
        $pythonScriptPath = base_path('app/Python/test.py');

        // Pythonスクリプトを実行
        $output = null;
        $resultCode = null;

        // exec関数を使ってPythonスクリプトを実行
        exec("python3 $pythonScriptPath", $output, $resultCode);

        // 実行結果とステータスコードを返す
        if ($resultCode === 0) {
            $result = implode("\n", $output);  // 出力を文字列に変換
        } else {
            $result = "Python script failed with result code: $resultCode";
        }

        // ビューに結果を渡す
        return view('python_test', ['result' => $result]);
    }
}
```

最後に表示させるためのビューを作成します。

resources/views/に
python_test.blade.phpファイルを作成します。

```
<!DOCTYPE html>
<html>
<head>
    <title>Python Script Result</title>
</head>
<body>
    <pre>{{ $result }}</pre>
</body>
</html>
```

ローカル環境で実行している場合は
```
http://localhost/python-test
```
で表示されます！

3番のPythonスクリプトを実行する関数は
exec()関数の場合は文字列を表示させるのに適しています。
テキスト以外であればpassthru()関数がいいみたいです。