python 和 node.js互動(node.js中執行python函式)
阿新 • • 發佈:2019-02-10
開發環境:
- 系統macOS 10.13.5
- python
- node
node.js和python通過終端來互動。核心方法是
exec(cmd, function (error, stdout, stderr) { });
這裡的cmd是類似於
python py_test.py arg0 arg1...
python可以通過 sys.argv 來獲取從node.js傳遞過來的引數 ,使用print語句,將結果資料再返回到node.js。node.js使用回撥方法中的stdout引數即為python返回的資料,進行解析即可。
下面貼出程式碼:
py_test.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
import time
# 定義接收到的不同環節碼,執行不同邏輯
def foo(var):
if var == '100':
# 與伺服器互動 虛擬請求資料時間1秒
time.sleep(1)
print('100#'+'{"sign":"1", "msg":"登入成功"}')
elif var == '200':
# 與伺服器互動 虛擬請求資料時間1秒
time.sleep(1)
print('200#'+'{"sign":"1", "msg":"進入大廳成功"}' )
elif var == '300':
# 與伺服器互動 虛擬請求資料時間1秒
time.sleep(1)
print('300#'+'{"sign":"1", "msg":"匹配成功"}')
else:
print('run the orderError')
# 引數為從命令列傳過來的引數 sys.argv ['py_test.py', arg1, arg2...]
# 所以取引數要從1開始,就是第二位置開始取
foo(sys.argv[1])
nodejs_test.js
var exec = require ('child_process').exec;
var cmds = ['100', '200', '300'];
var no = 0;
//先發第一個環節碼100,等待返回正確資料再進行傳送下一個碼
execCmd();
//該方法用於命令列執行python命令 類似於: python py_test.py arg1
//這樣在python中就可以接受傳遞過去的引數
function execCmd() {
exec('python py_test.py '+ cmds[no++], function (error, stdout, stderr) {
if(error){
console.error('error: ' + error);
return;
}
console.log('receive: ' + stdout.split("#")[0] + ": " + stdout.split("#")[1]);
//將返回的json資料解析,判斷是都執行下一步
var json = JSON.parse(stdout.split("#")[1]);
console.log(json.msg);
if(json.sign == "1" && no < 3){
execCmd();
}
});
}
終端執行命令
node nodejs_test.js
完成。
不積小流無以成江河,不積跬步無以至千里。