3

.phpスクリプトから変数にPython、またはその逆に変数を渡すことはできますか?

例えば:

//myPHPScript.php 
$hello = 'hello'; 

//myPythonScript.py
print(get the result from $hello variable found in myPHPScript.php) 
4

4 に答える 4

15

Python スクリプトの呼び出し方法によって異なります。たとえば、それを行う場合system()は、引数に入れることができます。

$hello = 'world';

$result = shell_exec('/path/to/python /path/to/your/script.py ' . $hello);

そしてPythonで:

import sys

who = sys.argv[1]

print "Hello %s" % who

$resultPHP には「Hello world」が含まれるようになりました。

常に可能であるとは限りませんが、検討する価値のある、よりパフォーマンスの高い可能性は、一種の「fastcgi アプローチ」です。Python スクリプトは実際には常に実行されており、たとえばポート 8888 でソケット接続 (たとえば、HTTPlib を使用) を受け入れます。その時点で、cURL を使用して PHP から接続しhttp://127.0.0.1:8888、JSON でエンコードされた構造化データを送信できます (Python には JSON デコーダーがあるため、私はPHP アンシリアライザーについてはよくわかりません)、同じパスを介して情報を返します。

Python スクリプトは、あらゆる意味で Web サービスになりました。また、同じ Web サービス インターフェイスに複数の異なるスクリプトを展開し、リクエストで送信された偽の URI に基づいて応答するスクリプトを選択することもできます。

このアプローチでは、リクエスト間の状態が適切に分離されていることを確認する必要があります。つまり、Peter に代わってデータ処理をリクエストしても、Paul に属するデータが返されることはありません。または、処理中のすべてのデータが安全でない、つまり、セキュリティや認証が不要であること。

このアプローチのもう 1 つの利点はキャッシュです。Python スクリプトは、PHP からのリクエスト間で有効なままであり、既知の質問に対して同じ回答を返すことができます。これが実行可能であれば、何も再計算する必要はありません。すぐにプラグインできる Python 用のキャッシング フレームワークがあります。

追加の利点は、Python サービスを別のマシン (より広いインターネットから到達できるとは限りません)、または複数の異なるマシンにデプロイすることで、このアプローチを簡単に拡張できることです。

于 2012-08-30T13:23:44.450 に答える
2

いくつかのオプション:

  • PHPに何らかの形式(JSONなど)を使用してファイルに変数を書き込ませ、Pythonプログラムにファイルを読み取らせます(ただし、これについて考えてみてください:複数のプロセスが読み取り/書き込みを試みるとどうなりますか?)
  • PHPにデータをデータベースに保存させ、Pythonスクリプトを同じデータベースから読み取ります(dbは同時実行性を処理する必要があります)
  • 一方のプロセスがもう一方のプロセスを呼び出し、stdin / stdout(迂回ファイル)を介してデータを渡すようにします
  • プラットフォームに適した他の形式のプロセス間通信を使用する
于 2012-08-30T13:26:38.143 に答える
0

filesysytemのどこかでunixドメインソケットを開きます。/ var/runのような場所。次に、プロセスに通常のファイルのように読み取りと書き込みを行います。ブーム。双方向通信。

于 2012-08-30T13:37:39.620 に答える