6

呼び出されたときに Pyton スクリプトを実行することになっている単純な PHP 関数があります。私は自分のphpプログラムでこの種の関数を何度も試しましたが、どういうわけか今回はこの関数はpythonスクリプトをまったく実行していません. コマンドプロンプトからスクリプトにアクセスして実行するpython testing.pyと、正常に実行されます。このスクリプトには python の NLTK ライブラリの本格的な実装が含まれており、その操作 (つまり、データ処理と db への保存) の実行と実行に 20 秒以上かかることに注意してください。この問題の原因となっている実行の遅延ですか、それとも今回欠けているものがありますか?

function success(){
   $mystring = exec('python testing.py');
   $mystring;
   if(!$mystring){

        echo "python exec failed";
            }
   else{
   echo "<br />";
   echo "successfully executed!";
   }
4

4 に答える 4

13

およびファイルにはフルパスを使用する必要がありpythonます。コマンドから前者を見つけることができます。これはwhich pythonおそらく「/usr/ bin / python」を出力し、後者をすでに知っているはずです。したがって、コマンドは次のようになります。

$mystring = exec('/usr/bin/python /home/user/testing.py');

また、Pythonスクリプトに適切な権限がすべてあることを確認する必要があります。これは、Webサーバーが別のユーザーとして実行されている可能性が高いため、権限は「-rwxrwxr-x」またはそれに近いものである必要があります。

于 2013-03-24T03:59:30.787 に答える
1

Python プログラムへの正確なパスを使用してみてください。

$mystring = exec('python testing.py');
于 2013-03-24T03:45:56.663 に答える
0

exec() などに問題はありません。
問題は、nltk モジュールが nltk_data ディレクトリを見つけられないことです。システム内で nltk_data が存在する場所を特定するだけです。通常は ~/nltk_data です。
関数を実行するときにそのパスをインポートして追加します。
nltk をインポートします。
nltk.data.path は、モジュールを検索する場所のリストです。
nltk.data.path.append("your location/directory"); を実行するだけです。

于 2014-07-01T14:30:51.803 に答える
0

$mystring;行を削除してみてください

function success() {
   $mystring = exec('python testing.py');
   if(!$mystring){
       echo "python exec failed";
   } else {
       echo "<br />";
       echo "successfully executed!";
   }
}

テスト目的で試してください:

function success() {
   $mystring = exec('python testing.py', $output);
   var_dump($output);
}
于 2013-03-24T03:50:53.973 に答える