(推奨チュートリアル: PHP ビデオ チュートリアル)
PHP プログラムで Python スクリプトを実行する方法を紹介します。
php での Python プログラムの実行は、主にプログラム実行関数に依存します。
ここでは、exec()、system()、および passthru() という 3 つの関連関数を示します。
ここでは主に exec() 関数について説明し、パラメーターを渡すためのこの関数の使用法、
および PHP が使用する josn データを返す Python の使用方法を紹介します。
外部プログラムの実行
exec ( string $command [, array &$output [, int &$return_var ]] ) : string
パラメータの説明:
command: 実行するコマンド, これには 3 つの部分文字列が含まれます。最初の部分文字列は現在使用されているシステムのインタープリタ、2 番目の部分文字列は実行されるスクリプトの場所、3 番目の部分文字列は渡す必要がある無制限のパラメータです (スペースを含む)分割して形式に注意してください。部分文字列を区切るにはスペースを使用します。
output: 出力パラメータが指定されている場合、この配列にはコマンド実行の出力が入力されます。出力の各行に配列内の 1 つの要素が含まれます。 (注: 出力に格納されるのは Python の戻り値ではなく、すべての戻り値は保存されません。出力に格納されるのは Python スクリプトで出力された値であり、Python スクリプトで出力されたすべてのデータです。 print() function)
return_var: Output パラメータと return_var パラメータの両方が指定された場合、コマンド実行後の戻りステータスがこの変数に書き込まれます。
index.php
<?php $re = exec('python ceshi.py', $out); // $re = iconv('gbk', 'utf-8', $re); var_dump($out); echo '<br/>'; var_dump($re);
ceshi.py
def send(): data = '1,2,3,4,5' print(data) if __name__ == '__main__': send()
を直接実行します (重要な注意: Python スクリプトによって返されたデータに中国語が含まれている場合) , エスケープには iconv('gbk', 'utf-8', $re); を使用する必要があります)
inde.php
$canshu1 = '这是PHP传过来的参数'; $canshu2 = date('Y-m-d'); $re = exec("python ceshi.py $canshu1 $canshu2"); $re = iconv('gbk', 'utf-8', $re); var_dump($re);
test.py
import sys def send(): # a1 = sys.argv[1] # a2 = sys.argv[2] re = sys.argv[1:] data = '1,2,3,4,5,' + ','.join(re) # 转字符串 print(data) if __name__ == '__main__': send()
sys パッケージをインポートし、sys.argv[] 配列を使用して受信パラメータを取得します。最初の受信パラメータは sys.argv[ 1] 、2 番目は sys.argv[2] などです。返された JSON データを受け取るために argv[0]
を使用しないでください:
import sys import json def send(): dict = {'id':111, 'title':'测试title'} dict['data'] = sys.argv[1:] jsonArr = json.dumps(dict, ensure_ascii=False) print(jsonArr) if __name__ == '__main__': send()
(漢字を使用する場合は、ensure_ascii=False を指定する必要があります)
外部スクリプトを実行します。
system ( string $command [, int &$return_var ] ) : string
C 版の system() 関数と同様に、コマンドパラメータで指定されたコマンドを実行し、実行結果を出力します。
PHP がサーバー モジュールで実行されている場合、system() 関数は、出力の各行の後に Web サーバーの出力キャッシュを自動的に更新しようとします。
コマンドの生の出力を処理せずに取得したい場合は、 passthru() 関数を使用してください。
index.php
<?php echo '这是运行直接输出:'; $re = system('python ceshi.py'); // $re = iconv('gbk', 'utf-8', $re); echo '<br/>'; echo '这是赋值输出:'; var_dump($re);
ここでは test.py の元のバージョンが使用されており、出力結果は次のとおりです。
外部プログラムを実行して出力を表示
passthru ( string $command [, int &$return_var ] ) : void
exec() 関数と同様に、 passthru() 関数も外部コマンドの実行に使用されます。 (コマンド)。実行された Unix コマンドがバイナリ データを出力し、ブラウザに直接送信する必要がある場合は、exec() 関数や system() 関数の代わりにこの関数を使用する必要があります。画像ストリームを直接出力できる pbmplus などのコマンドを実行するためによく使用されます。 Content-type を image/gif に設定し、pbmplus プログラムを呼び出して gif ファイルを出力すると、PHP スクリプトからブラウザに画像を直接出力できます。
index.php
echo '这是运行直接输出:'; $re = passthru('python ceshi.py'); // $re = iconv('gbk', 'utf-8', $re); echo '<br/>'; echo '这是赋值输出:'; var_dump($re);
ここでは test.py の元のバージョンが使用されており、出力結果は次のとおりです。
(推奨チュートリアル: PHP ビデオ チュートリアル )
以上がPHPプログラムでPythonスクリプトを実行する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。