节点js后端调用一个python函数

我有点修复 – 我有一个node.js应用程序运行在我的后端,我有一个用Python编写的代码块。 这个Python程序需要在后台不断运行,我需要从某个客户端的API调用中的JavaScript代码中调用该程序中的一个函数。
我正在考虑将Python程序作为守护进程运行,但是我无法find任何有关如何通过javascript代码调用该守护进程的函数的信息。
我从来没有与守护进行过任何工作,所以在这一点上,我是无能的。 我想知道这样的事情是否可能。

我能想到的唯一的其他select是切换到Django,并将数据保存为Django应用程序本身的一部分。 我可以做到这一点,但我不喜欢。 我不能在JavaScript中编写Python代码,因为它依赖于我在npm上找不到的一些专有库。

如果有人遇到过这个问题,请告诉我。 谢谢!

这里有一个简单的例子(使用pip install flask )。 假定函数是“这是一个真正的单词”; 而重要的准备工作是加载字典。 这是代码:

 from flask import Flask, request, jsonify app = Flask(__name__) # heavy loading dictionary = frozenset( line.rstrip('\n') for line in open('/usr/share/dict/words')) # lightweight processing @app.route('/real_word', methods=['POST']) def real_word(): result = request.form['word'] in dictionary return jsonify(result) # quick-and-dirty start if __name__ == '__main__': app.run(host='127.0.0.1', port=7990) 

当你运行它时,你可以执行127.0.0.1:7990/real_word的请求,把你的单词作为一个POST参数。 例如,假设npm install request

 var request = require('request'); function realWord(word) { return new Promise(function(fulfill, reject) { request.post( 'http://127.0.0.1:7990/real_word', { form: { word: word } }, function (error, response, body) { if (!error && response.statusCode == 200) { fulfill(JSON.parse(body)); } else { reject(error, response); } } ); }); } realWord("nuclear").then(console.log); // true realWord("nucular").then(console.log); // false 

(显然,在一个简单的例子中,读一个单词列表并不是很“重”,而且实际上没有理由对一个单一的布尔进行JSON化;但是你可以采用完全相同的代码结构并将其应用于几乎所有的函数,可以连续input任何types的input/输出。)

如果只是为了您的需要,您可以直接运行Python程序。 如果你想要的是生产质量的东西,请查看如何在WSGI容器上托pipeFlask应用程序,如Gunicorn或mod_wsgi。

你可以使用节点的subprocess调用python脚本,你甚至可以pipe结果返回到JavaScript,如果你愿意?

https://nodejs.org/api/child_process.html

https://medium.freecodecamp.com/node-js-child-processes-everything-you-need-to-know-e69498fe970a

Javascript.js

 var exec = require('child_process').exec; cmd = `python python.py` // insert any command line argument exec(cmd, function(error, stdout, stderr) { console.log(stdout); }); 

Python.py

 print("Heyo"); 

即使这个例子只捕获控制台的一个输出,你也可以实现一个stream。