使用Node.js Express服务器调用Python脚本

5
使用下面的代码,我已经在3000端口上创建了一个HTTP服务器,并添加了一些GET参数。我想用这个express.js服务器代码调用一个Python脚本,以便当我访问localhost:3000/key1/abc/key2/234时,Python脚本将被调用。我已经准备好了我的Python脚本,它将输入参数作为sys.argv。请建议如何使用此代码调用Python脚本,以便它将value1和value2作为输入参数,并返回JSON。
var express = require('express');
var app = express();
app.get('/key1/:value1/key2/:value2',function(req,res)
{
    console.log(req.params);
    var value1 = req.params.value1;
    var value2 = req.params.value2;
    res.send(req.params);
});
app.listen(3000,function()
{
    console.log("Server listening on port 3000");
});
2个回答

8
要从Node.js运行Python脚本需要启动一个新进程。你可以使用child_process来完成这个操作。
你需要将python作为可执行文件,并将脚本名称作为第一个参数运行。
以下是基于上述文档的示例:
const spawn = require('child_process').spawn;
const ls = spawn('python', ['script.py', 'arg1', 'arg2']);

ls.stdout.on('data', (data) => {
  console.log(`stdout: ${data}`);
});

ls.stderr.on('data', (data) => {
  console.log(`stderr: ${data}`);
});

ls.on('close', (code) => {
  console.log(`child process exited with code ${code}`);
});

如何传递参数以便Python程序可以将其接受为sys.argv并返回JSON。 - Nikita Gupta
1
var arg1 = req.params.value1; var arg2 = req.params.value2; const ls = spawn('python', ['script.py', arg1, arg2]); 这段代码正确吗? - Nikita Gupta
已点赞,但如果我想要一个无限运行的Python进程,并且Express需要与其通信,我该怎么办? - PirateApp

0
如果你想带参数执行它
const scriptExecution = spawn(pythonExecutable, ["my_Script.py", "Argument 1","Argument 2"]);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接