如何从Node.js调用Python函数

我有一个Express Node.js应用程序,但我也有一个可以在Python中使用的机器学习算法。有没有一种方法可以从Node.js应用程序中调用Python函数来利用机器学习库的功能?

宝儿Davaid2020/03/23 21:45:34

您可以将自己的python进行转换,然后像调用JavaScript一样对其进行调用。我为screeps成功地做到了这一点,甚至得到它在浏览器中运行的LA brython

小宇宙2020/03/23 21:45:34

现在,您可以使用支持Python和Javascript的RPC库,例如zerorpc

从他们的首页:

Node.js客户端

var zerorpc = require("zerorpc");

var client = new zerorpc.Client();
client.connect("tcp://127.0.0.1:4242");

client.invoke("hello", "RPC", function(error, res, more) {
    console.log(res);
});

Python服务器

import zerorpc

class HelloRPC(object):
    def hello(self, name):
        return "Hello, %s" % name

s = zerorpc.Server(HelloRPC())
s.bind("tcp://0.0.0.0:4242")
s.run()
小宇宙蛋蛋2020/03/23 21:45:34

我在节点10和子进程上1.0.2来自python的数据是一个字节数组,必须进行转换。这是在python中发出http请求的另一个快速示例。

节点

const process = spawn("python", ["services/request.py", "https://www.google.com"])

return new Promise((resolve, reject) =>{
    process.stdout.on("data", data =>{
        resolve(data.toString()); // <------------ by default converts to utf-8
    })
    process.stderr.on("data", reject)
})

request.py

import urllib.request
import sys

def karl_morrison_is_a_pedant():   
    response = urllib.request.urlopen(sys.argv[1])
    html = response.read()
    print(html)
    sys.stdout.flush()

karl_morrison_is_a_pedant()

ps不是一个人为的例子,因为节点的http模块不会加载我需要发出的一些请求