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

完成。


不积小流无以成江河,不积跬步无以至千里。





猜你喜欢

转载自blog.csdn.net/qq_23057645/article/details/80967657