亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

php調用python服務

系統(tǒng) 1756 0

php調用python服務

侃侃:公司用的php的popen以命令的形式調用python,首先說說這樣做的缺點。
php執(zhí)行命令行調用python的缺點
popen('python test.py [參數(shù)]', 'r');
缺點一:windows默認的是gbk編碼,當php中傳utf-8中文參數(shù)的時候,python接收到的參數(shù)會有問題。

當然,這是有解決的辦法的,就是windows下轉換一下字符的編碼,linux不用轉換。再來python接收參數(shù)的時候肯定也要轉換編碼了,煩不煩?

cmd命令或者shell命令是有長度限制的,傳的參數(shù)過長的時候,接收到的參數(shù)就不會完整。
執(zhí)行shell命令是有危險的,萬一參數(shù)里面多了個啥,你知道的。

這也能解決,php中的函數(shù)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:

          
            def __init__(self):
    print('Welcome!')
def test(self, args):
    res = jsbeautifier.beautify(args[0].encode('utf-8'))
    return res;
def error(self, args):
    return 'not function!'

          
        

class ThreadedTCPRequestHandler(SocketServer.BaseRequestHandler):

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

          
        

if name == '__main__':

          
            server = Server('/tmp/daemon-tortoise.pid')
server.conf('0.0.0.0', 1990, Todo())
if len(sys.argv) == 2:
    if 'start' == sys.argv[1]:
        server.start()
    elif 'stop' == sys.argv[1]:
        server.stop()
    elif 'restart' == sys.argv[1]:
        server.restart()
    else:
        print("Unknown command")
        sys.exit(2)
    sys.exit(0)
else:
    print("usage: %s start|stop|restart" % sys.argv[0])
    sys.exit(2)
          
        

解釋一下,上面這些代碼是用python創(chuàng)建一個socket服務器,并且加入系統(tǒng)的守護進程。Todo里面實現(xiàn)策略工廠啥的,你懂的。使用方法:
python sever.py [start|stop|restart]

接著設為系統(tǒng)啟動項就O了。

php通過socket調用python
//代碼中引用的文件將會在附件中給出,附件中還給出了php并發(fā)的寫法
header("Content-type: text/html; charset=utf-8");
require 'socketapi.php';
$s = new server('192.168.1.8', 1990);
$code = <<
/ 美化:格式化代碼,使之容易閱讀 /
/ 凈化:去掉代碼中多余的注釋、換行、空格等 /
/ 壓縮:將代碼壓縮為更小體積,便于傳輸 /
/ 解壓:將壓縮后的代碼轉換為人可以閱讀的格式 /

/ 如果有用,請別忘了推薦給你的朋友: /
/ javascript在線美化、凈化、壓縮、解壓:http://box.inote.cc/js /

/ 以下是演示代碼 /

          
            var getPositionLite = function(el) {        var x = 0,        y = 0;        while (el) {            x += el.offsetLeft || 0;            y += el.offsetTop || 0;            el = el.offsetParent        }        return {            x: x,            y: y        }    };
          
        

/ 更新記錄: /

          
            var history = {
    'v1.0':    ['2011-01-18','javascript工具上線']
};
          
        

EOT;
$res = $s->obj('Todo')->test($code);
echo '

          '.$res.'
        
';


更多文章、技術交流、商務合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 色之综综 | 极品美女一级毛片免费 | 中文字幕 亚洲精品 | 日韩激情中文字幕一区二区 | 亚洲国产激情在线一区 | 欧美午夜大片 | 四虎免费看 | 中文字幕一区二区三区精品 | 99re这里只有精品66 | 精品无人区乱码1区2区 | 成人不卡在线 | 香蕉视频亚洲 | 看全色黄大色黄大片色责看的 | 久久久久久麻豆 | 一区二区精品久久 | 日本精品99 | 一区二区三区乱码 | 久久机热这里只有精品无需 | 久久中文字幕2021精品 | 国产精品麻豆99久久 | 欧美一区二区三区综合色视频 | 久久久久久久国产a∨ | 天天干天天玩天天操 | 国产精品无码久久综合网 | 久久蝌蚪| 亚洲欧美日韩久久精品第一区 | 成年女人毛片免费观看中文w | 四虎影视库| 国产婷婷 | 久久99精品国产一区二区三区 | 国产欧美日韩精品一区二 | 久久久久久极精品久久久 | 久久免费视频播放 | 日日日日人人人夜夜夜2017 | 一区二区精品久久 | 日韩视频免费在线播放 | 色天使久久综合网天天 | 香蕉爱爱视频 | 欧美日韩亚洲国产无线码 | 欧美成人全部费免网站 | 婷婷亚洲综合五月天在线 |