概述
开发环境:
- 系统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
完成。
不积小流无以成江河,不积跬步无以至千里。
最后
以上就是坦率可乐为你收集整理的python 和 node.js交互(node.js中执行python函数)的全部内容,希望文章能够帮你解决python 和 node.js交互(node.js中执行python函数)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复