PythonスクリプトをPHPで実行し、互いに変数を転送することは可能ですか?
特定のグローバルな方法でデータのWebサイトを破棄するクラスがあります。もっと具体的にしたいし、すでにいくつかのウェブサイトに固有のpythonsスクリプトを持っています。
クラスにそれらを組み込む方法を探しています。
両者間の安全で信頼性の高いデータ転送は可能ですか?もしそうなら、そのようなものを手に入れることはどれほど難しいですか?
通常、共通の言語形式を使用し、stdin
とstdout
を使用してデータを通信することにより、言語間で通信できます。
シェル引数を使用してJSON経由で初期データを送信するPHP/Pythonの例
PHP:
// This is the data you want to pass to Python
$data = array('as', 'df', 'gh');
// Execute the python script with the JSON data
$result = Shell_exec('python /path/to/myScript.py ' . escapeshellarg(json_encode($data)));
// Decode the result
$resultData = json_decode($result, true);
// This will contain: array('status' => 'Yes!')
var_dump($resultData);
Python:
import sys, json
# Load the data that PHP sent us
try:
data = json.loads(sys.argv[1])
except:
print "ERROR"
sys.exit(1)
# Generate some data to send to PHP
result = {'status': 'Yes!'}
# Send it to stdout (to PHP)
print json.dumps(result)
「プロセス間通信」(IPC)を探しています-基本的にリモートプロセスで関数を呼び出すことができ、言語間のすべての引数データ型の翻訳を処理するXML-RPCのようなものを使用できますPHP Pythonの関数、またはその逆-引数が サポートされている型 )である限り
Pythonには、組み込みの XML-RPCサーバー と client があります
phpxmlrpc ライブラリにはクライアントとサーバーの両方があります
Pythonサーバーとクライアント 、および PHPクライアント と サーバー の両方の例があります
最善の策は、サブプロセスとしてpythonを実行し、その出力をキャプチャしてから解析することです。
$pythonoutput = `/usr/bin/env python pythoncode.py`;
JSONを使用すると、おそらく標準であり、両方の言語でサポートされているため、両方の言語での生成と解析の両方を簡単に行うことができます(少なくとも、非古代バージョンはサポートしています)。 Pythonでは、
json.dumps(stuff)
そして、PHPで
$stuff = json_decode($pythonoutput);
また、データをファイルとして明示的に保存したり、ソケットを使用したり、必要なシナリオに応じてこれをより効率的に(およびより複雑に)するさまざまな方法を使用したりすることもできますが、これは最も簡単です。
同じ問題を抱えていて、私のソリューションを共有したいと考えていました。 (アマダンが提案するものに密接に従います)
import subprocess
output = subprocess.check_output(["php", path-to-my-php-script, input1])
次のようにすることもできます。名前のない引数を送信する代わりに、blah = input1 ...を使用して、$ _ GET ['blah']を使用します。
$blah = $argv[1];
if( isset($blah)){
// do stuff with $blah
}else{
throw new \Exception('No blah.');
}