我是靠谱客的博主 坦率可乐,最近开发中收集的这篇文章主要介绍python 和 node.js交互(node.js中执行python函数),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

开发环境:

  1. 系统macOS 10.13.5
  2. python
  3. 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函数)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部