php调用python服务
侃侃:公司用的php的popen以命令的形式调用python,首先说说这样做的缺点。
php执行命令行调用python的缺点
popen('python test.py[参数]','r');
缺点一:windows默认的是gbk编码,当php中传utf-8中文参数的时候,python接收到的参数会有问题。
当然,这是有解决的办法的,就是windows下转换一下字符的编码,linux不用转换。再来python接收参数的时候肯定也要转换编码了,烦不烦?
cmd命令或者shell命令是有长度限制的,传的参数过长的时候,接收到的参数就不会完整。
执行shell命令是有危险的,万一参数里面多了个啥,你知道的。
这也能解决,php中的函数escapeshellarg,嗯哼先给他escape一下。
那怎么办呢?
python socket server
不多说,不清楚的百度"socket",下面上代码(写的一个php调用python服务美化javascript的应用,服务器端python):
代码中引用的模块将会在附件中给出
import sys,json
import traceback
import SocketServer
from daemon import Daemon
import jsbeautifier
php调用python服务
侃侃:公司用的php的popen以命令的形式调用python,首先说说这样做的缺点。
php执行命令行调用python的缺点
popen('python test.py[参数]','r');
缺点一:windows默认的是gbk编码,当php中传utf-8中文参数的时候,python接收到的参数会有问题。
当然,这是有解决的办法的,就是windows下转换一下字符的编码,linux不用转换。再来python接收参数的时候肯定也要转换编码了,烦不烦?
cmd命令或者shell命令是有长度限制的,传的参数过长的时候,接收到的参数就不会完整。
执行shell命令是有危险的,万一参数里面多了个啥,你知道的。
这也能解决,php中的函数escapeshellarg,嗯哼先给他escape一下。
那怎么办呢?
python socket server
不多说,不清楚的百度"socket",下面上代码(写的一个php调用python服务美化javascript的应用,服务器端python):
代码中引用的模块将会在附件中给出
import sys,json
import traceback
import SocketServer
from daemon import Daemon
import jsbeautifier
class Todo:
pc_base::load_sys_class('format','',0);
$show_header='';
$model_cache=getcache('model','commons');
if(!isset($_GET['modelid'])){
showmessage(L('please_select_modelid'));
}
else{
$page=intval($_GET['page']);
$modelid=intval($_GET['modelid']);
$this->db->set_model($modelid);
$where='';
if($_GET['catid']){
$catid=intval($_GET['catid']);
$where.='catid=''.$catid.''';
}
$where.=$where?'AND status=99':'status=99';
if(isset($_GET['keywords'])){
$keywords=trim($_GET['keywords']);
$field=$_GET['field'];
if(in_array($field,array('id','title','keywords','description'))){
if($field=='id'){
$where.='AND`id`=''.$keywords.''';
}
else{
$where.='AND`'.$field.'`like'%'.$keywords.'%'';
}
}
}
}
ef handle(self):
while True:
try:
data=self.request.recv(2*1024*1024)
if not data:
print('end')
break
data=json.loads(data)
res=getattr(self._object,data['func'],'error')(data['args'])
if not res:
res=''
res=str(len(res)).rjust(8,'0')+str(res)
self.request.send(res)
except:
print('error in ThreadedTCPRequestHandler:%s,res:%s'%(traceback.format_exc(),data))
class ThreadedTCPServer(SocketServer.ThreadingMixIn,SocketServer.TCPServer):
pass
class Server(Daemon):
def conf(self,host,port,obj):
self.host=host
self.port=port
self.obj=obj
ThreadedTCPServer.allow_reuse_address=True
def run(self):
ThreadedTCPRequestHandler._object=self.obj
server=ThreadedTCPServer((self.host,self.port),ThreadedTCPRequestHandler)
server.serve_forever()



