0

Android から GET HTTP リクエストを作成するときに php から python (2.6) スクリプトを呼び出そうとしていますが、インポート numpy がスクリプトに含まれていると失敗し、それを削除するとスクリプト/呼び出しが機能します。MySQL で数値フィールドの FFT スペクトルを計算しているので、numpy が必要です (または必要ですか?)。

SOに関する同様の質問を見てきました. @dietrich-eppが回答したこれが最良の質問ですが、同じ提案を試してもスクリプトは失敗します.

私のpythonスクリプトのインポート部分は次のとおりです。

import  os, os.path, sys
import numpy
import string
import math
import MySQLdb

そして私のPHPファイルの始まり:

<?php
putenv('PYTHONPATH=/usr/lib/python2.6/site-packages:');
...

そして、これは私が私のpythonスクリプトを呼び出す方法です:

$command = "/var/www/html/tremcam/tst0.py localhost baseline@nd.edu 2>&1";
$pid = popen( $command,"r");
while( !feof( $pid ) )
{
 #echo fread($pid, 256);
 print(json_encode(fread($pid, 256)));
 flush();
 ob_flush();
 usleep(100000);
}
pclose($pid);

そして、私の環境変数には PYTHONPATH が次のように設定されています。

/var/www/html/tremcam/pythons
/usr/lib/python2.6/site-packages
/usr/lib
/usr/lib/python26.zip
/usr/lib/python2.6
/usr/lib/python2.6/plat-linux2
/usr/lib/python2.6/lib-tk
/usr/lib/python2.6/lib-old
/usr/lib/python2.6/lib-dynload
/usr/lib/python2.6/site-packages/gtk-2.0
/usr/lib/python2.6/site-packages/setuptools-0.6c11-py2.6.egg-info
/usr/lib/python2.6/site-packages/setuptools-0.6c11-py2.6.egg-info

この ( ) は、代わりPYTHONPATH=/usr/lib/python2.6/site-packagesに指している必要がありますか?/usr/lib/python2.6/site-packages/numpy

現在 PHP で使用している方法ではなく、passthru() を使用してみます。numpy を np としてインポートできるようになった後、コードが完了するまでに数秒かかることに注意してください。これも問題になりますか?

更新:使用する場合:passthru('/var/www/html/tremcam/tst0.py localhost baseline@nd.edu 2>&1',$result);

終了ステータス コード 139 が表示されるので、あまり役に立ちません。どう思いますか?

4

1 に答える 1

2

setsebool httpd_tmp_exec on 動作する場合は 試してみてください setsebool -P httpd_tmp_exec on

SELinux が Apache の pytonpath ディレクトリを拒否している必要があります (それでも動作しない場合は非常に numpy なフォルダーを提供する必要がありますが、まったく必要ないはずです)。

少しきれいではないアプローチは、この行import ctypeslibにコメントを付けることです/<your numpy path>/numpy/__init__.py

私は同じ問題を抱えていて、両方のアプローチがうまくいきました(後者は後の開発で矛盾につながる可能性があるため、最初にsetseboolを試すことをお勧めします)

于 2012-12-18T08:40:30.187 に答える