PHPからPythonファイルを呼び出す方法を解説
PHPのプログラム内でPythonスクリプトを実行したい場面は意外と多くあります。例えば、機械学習やデータ分析など、Pythonが得意な処理をPHPで構築したWebアプリケーションから呼び出したいケースなどが典型です。
PHPからPythonファイルを実行するには、shell_exec関数を使用するのが一般的な方法です。この記事では、その具体的な手順をわかりやすく解説します。
基本の方法:shell_exec関数を使う
PHPからPythonスクリプトを呼び出すには、シェルコマンドとして実行します。セキュリティ対策のため、コマンド文字列はescapeshellcmd関数でエスケープしておくのがおすすめです。
サンプルコード
<?php
$command = escapeshellcmd('/usr/custom/test.py');
$output = shell_exec($command);
echo $output;
?>このコードでは、指定されたパスにあるPythonファイルを実行し、その標準出力を取得して表示しています。
注意点:Pythonファイル側にインタープリタの指定が必要
上記の方法でスクリプトを呼び出すことはできますが、実行されるPythonファイルの先頭に、使用するインタープリタ(実行環境)を指定する「シバン(shebang)」と呼ばれる行を追加しておく必要があります。
Pythonファイルの1行目に以下のように記述してください。
#!/usr/bin/env python
この記述により、システムはどのインタープリタを使ってスクリプトを実行すべきかを認識できるようになります。/usr/bin/env pythonと書くことで、環境変数から適切なPythonのパスを自動的に探してくれるため、環境の違いにも柔軟に対応できます。
代替方法:コマンド実行時にインタープリタを指定する
Pythonファイル側にシバンを書かずに済ませたい場合は、PHP側のコマンド実行時に直接インタープリタを指定する方法もあります。
サンプルコード
<?php
$command = escapeshellcmd('python3 /usr/custom/test.py');
$output = shell_exec($command);
echo $output;
?>このようにpython3コマンドに続けてスクリプトのパスを渡すことで、明示的にPython3で実行することができます。複数のPythonバージョンが混在する環境では、こちらの方が確実に意図したバージョンで動作させられるメリットがあります。
まとめ
- PHPからPythonを実行するには
shell_exec関数を使用する - コマンドは
escapeshellcmdでエスケープし、セキュリティリスクを軽減する - スクリプト単体で実行する場合は、ファイル先頭にシバン(
#!/usr/bin/env python)を記述する - もしくは、
python3 スクリプト名のようにコマンド側でインタープリタを明示的に指定してもよい
これらの方法を活用すれば、PHPとPythonそれぞれの強みを掛け合わせたアプリケーション開発が可能になります。外部コマンドを実行する際は、ユーザー入力をコマンドに含めない、権限を最小限に抑えるなどのセキュリティ面への配慮も忘れないようにしましょう。
-
Python 3のtkinterでファイルダイアログから文字列(ファイルパス)を取得する方法
tkinterアプリケーションでファイルシステムを操作したい場合には、filedialogモジュールを利用します。このモジュールは、システム上のファイルを扱うための仕組みを提供しており、さまざまな種類のファイルダイアログを簡単に作成できる組み込み関数を多数備えています。用途に応じて任意のfiledialog関数を選択し、アプリケーションに組み込むことが可能です。中でも最もよく使われているのがfiledialog.askopenfilename()です。この関数を呼び出すと、ユーザーにファイルを開かせるためのダイアログが表示され、選択されたファイルのパスを文字列として受け取ることができます。サン
-
コマンドラインからPythonモジュールを呼び出す方法
コマンドラインからPythonモジュールを呼び出す基本方法 Pythonでスクリプトをモジュールとして作成する場合、その動作を手軽に確認する方法のひとつが、スクリプトの末尾に関数呼び出しを追加して実行することです。 1. スクリプトの末尾に関数呼び出しを追加する たとえば、次のように関数 fubar() を定義したスクリプトがあるとします。ファイルの最後に関数を呼び出すコードを記述します。 def fubar(): # 何か便利な処理を行う print(fubar が実行されました) fubar() 2. コマンドプロンプトから実行する ターミナル(コマンドプロンプト)で