2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Laravel でのPython使用について

Last updated at Posted at 2024-11-04

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()関数がいいみたいです。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?