为了账号安全,请及时绑定邮箱和手机立即绑定

钻石OTC跑分系统开发

2019.09.27 14:23 314浏览

  

http://img2.mukewang.com/5d8da9e800011a4005580774.jpg

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()


点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

相关文章推荐

正在加载中
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消