2016-07-04 5 views
0

現在、echo exec("python programFilePath $variables");でPHP経由で呼び出されているバックエンドサーバープログラムがあります。この方法はうまくいきましたが、Pythonプログラムに新しいコンポーネントを追加しました。この新しいコンポーネントはWeb要求を行い、必要なデータが端末の出力画面に出力されます。非同期に実行されるプログラムからPHPの表示データを取得するにはどうすればよいですか?

残念ながら、php echo exec関数は、このデータを印刷しません。表面的には、Pythonの美しいスープモジュールが要求を非同期に実行するためです。明らかに、これは主要な動的コンポーネントが機能しない場合にウェブページを壊す。

どのようにPHPをプログラムを実行させるだけでなく、それはデータを表示することができますか?

編集

Here is the code for the problematic python script I am trying to run.

IDLEまたは端子を介して実行したときにそれは完璧に動作します。私はPHPのコマンドでそれを実行したときしかし、:

echo exec ("python /Users/USERNAME/Desktop/Exeter_Bookstore_Project/lab/Python/amazonParser.py"); 

それは私のデバッグページでは動作しない唯一のテストです: enter image description here

誰もがそれである理由のアイデアを持っていますか?

+0

あなたが言っていることは、プログラムの出力を別の場所にリダイレクトしない限り、PHPがプロセスを終了するのを待っていることを示す 'exec'のドキュメントと矛盾します。 – Pete

+0

@PietervandenHam私はプログラムの出力をリダイレクトしませんでしたが、私はデバッグに使用したメソッドの詳細を更新し、使用しているスクリプトへのリンクも与えました。スクリプト自体に明らかな問題はありますか? – xxmbabanexx

答えて

0

execは同期です。これは、PHPスクリプトを先に移動する前にプロセスが終了するのを待つことを意味します。

同様に、echoは結果を出力する前にexecプロセスが完了するのを待ちます。

したがって、いくつかの短絡の問題が発生している場合は、解決策はPythonスクリプトにある可能性があります。

この方法はうまくいきましたが、新しいコンポーネントを pythonプログラムに追加しました。この新しいコンポーネントは、スクリプトがたぶんあなたが追加されたコンポーネントが非同期で実行されている...実行する

を2-3秒 を取るのでしょうか?もしそうなら、PythonスクリプトはすぐにPHPに実行を戻し、新しいコンポーネントを別のスレッドで実行することができます。 PHPの観点からは、Pythonが完成したようです。

+0

これで、スクリプトを同期して実行するにはどうしたらよいですか?私は編集のスクリプトへのリンクを与えました、あなたがそれを見渡して私にいくつかの指針を与えることができれば本当に感謝します。私はこの分野で少し騒がしいです。 – xxmbabanexx

+0

Pythonで利用できるマルチプロセッシングモジュールの使用を検討することをお勧めします。2.6 は、Pythonスクリプトで非同期呼び出しのコールバックを使用しています。 あなたのコールバックで残りのスクリプトを書きます... 同じレベルの同期が達成されています... 1.プールを呼び出して、新しい文書化されたコード行の新しい仕事を作成します。 2.コールバックのフォローアップが必要ですあなたのコードが実行を終了すると呼び出される 3.コールバックでは、残りのスクリプトが正常である – coolstoner

関連する問題