ホームページ >バックエンド開発 >PHPの問題 >PHPプログラムでPythonスクリプトを実行する方法

PHPプログラムでPythonスクリプトを実行する方法

WBOY
WBOY転載
2022-09-09 13:48:592631ブラウズ

(推奨チュートリアル: PHP ビデオ チュートリアル)

PHP プログラムで Python スクリプトを実行する方法を紹介します。

php での Python プログラムの実行は、主にプログラム実行関数に依存します。

ここでは、exec()、system()、および passthru() という 3 つの関連関数を示します。

ここでは主に exec() 関数について説明し、パラメーターを渡すためのこの関数の使用法、

および PHP が使用する josn データを返す Python の使用方法を紹介します。

1. exec()

外部プログラムの実行

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 パラメータの両方が指定された場合、コマンド実行後の戻りステータスがこの変数に書き込まれます。

1.

index.php

<?php
$re = exec(&#39;python ceshi.py&#39;, $out);
// $re = iconv(&#39;gbk&#39;, &#39;utf-8&#39;, $re);
var_dump($out);
echo &#39;<br/>&#39;;
var_dump($re);

ceshi.py

def send():
    data = &#39;1,2,3,4,5&#39;
    print(data)
if __name__ == &#39;__main__&#39;:
    send()

を直接実行します (重要な注意: Python スクリプトによって返されたデータに中国語が含まれている場合) , エスケープには iconv('gbk', 'utf-8', $re); を使用する必要があります)

#2. パラメータを渡し、戻りデータを受け取る

inde.php

$canshu1 = &#39;这是PHP传过来的参数&#39;;
$canshu2 = date(&#39;Y-m-d&#39;);
$re = exec("python ceshi.py $canshu1 $canshu2");
$re = iconv(&#39;gbk&#39;, &#39;utf-8&#39;, $re);
var_dump($re);

test.py

import sys
def send():
    # a1 = sys.argv[1]
    # a2 = sys.argv[2]
    re = sys.argv[1:]
    data = &#39;1,2,3,4,5,&#39; + &#39;,&#39;.join(re) # 转字符串
    print(data)
if __name__ == &#39;__main__&#39;:
    send()

sys パッケージをインポートし、sys.argv[] 配列を使用して受信パラメータを取得します。最初の受信パラメータは sys.argv[ 1] 、2 番目は sys.argv[2] などです。返された JSON データを受け取るために argv[0]

を使用しないでください:

import sys
import json
def send():
    dict = {&#39;id&#39;:111, &#39;title&#39;:&#39;测试title&#39;}
    dict[&#39;data&#39;] = sys.argv[1:]
    jsonArr = json.dumps(dict, ensure_ascii=False)
    print(jsonArr)
if __name__ == &#39;__main__&#39;:
    send()

(漢字を使用する場合は、ensure_ascii=False を指定する必要があります)

2.system()

外部スクリプトを実行します。

system ( string $command [, int &$return_var ] ) : string

C 版の system() 関数と同様に、コマンドパラメータで指定されたコマンドを実行し、実行結果を出力します。

PHP がサーバー モジュールで実行されている場合、system() 関数は、出力の各行の後に Web サーバーの出力キャッシュを自動的に更新しようとします。

コマンドの生の出力を処理せずに取得したい場合は、 passthru() 関数を使用してください。

index.php

<?php
echo &#39;这是运行直接输出:&#39;;
$re = system(&#39;python ceshi.py&#39;);
// $re = iconv(&#39;gbk&#39;, &#39;utf-8&#39;, $re);
echo &#39;<br/>&#39;;
echo &#39;这是赋值输出:&#39;;
var_dump($re);

ここでは test.py の元のバージョンが使用されており、出力結果は次のとおりです。

3. passthru()

外部プログラムを実行して出力を表示

passthru ( string $command [, int &$return_var ] ) : void

exec() 関数と同様に、 passthru() 関数も外部コマンドの実行に使用されます。 (コマンド)。実行された Unix コマンドがバイナリ データを出力し、ブラウザに直接送信する必要がある場合は、exec() 関数や system() 関数の代わりにこの関数を使用する必要があります。画像ストリームを直接出力できる pbmplus などのコマンドを実行するためによく使用されます。 Content-type を image/gif に設定し、pbmplus プログラムを呼び出して gif ファイルを出力すると、PHP スクリプトからブラウザに画像を直接出力できます。

index.php

echo &#39;这是运行直接输出:&#39;;
$re = passthru(&#39;python ceshi.py&#39;);
// $re = iconv(&#39;gbk&#39;, &#39;utf-8&#39;, $re);
echo &#39;<br/>&#39;;
echo &#39;这是赋值输出:&#39;;
var_dump($re);

ここでは test.py の元のバージョンが使用されており、出力結果は次のとおりです。

(推奨チュートリアル: PHP ビデオ チュートリアル )

以上がPHPプログラムでPythonスクリプトを実行する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はjb51.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。