2012-11-04 38 views
0

尝试从PHP调用python(2.6)脚本时从Android发出GET HTTP请求,但如果导入numpy是在我的脚本中,我得到一个失败,如果我删除它,脚本/通话起作用。我正在计算MySQL中数字字段的FFT频谱,所以我需要numpy(或者我?)。从php调用python失败时,导入numpy

我看过SO上的类似问题,this一个,由@ 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 [email protected] 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而不是?

我会尝试使用passthru()而不是我目前在PHP中使用的方式。请注意,在我能够将numpy导入为np之后,代码将需要几秒钟才能完成,这是否也会成为问题?

更新:如果我使用:passthru('/var/www/html/tremcam/tst0.py localhost [email protected] 2>&1',$result);

我得到的退出状态码139,所以这是不是对我非常有帮助,你有什么感想?

回答

2

setsebool httpd_tmp_exec on 尝试,如果它的工作原理使其永久与 setsebool -P httpd_tmp_exec on

应该SELinux的否认阿帕奇您pytonpath目录(是的,你应该提供非常numpy的文件夹,如果它仍然无法正常工作,但它根本不需要)。

一个稍微不那么干净的方法是注释此行import ctypeslib/<your numpy path>/numpy/__init__.py

我有同样的问题,这两个方法工作的罚款(后者虽然可能会导致在后来的发展有些不一致,因此我建议你试试首先设置setsebool)