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