【问题标题】:Calling python script with node js express server使用 node js express 服务器调用 python 脚本
【发布时间】:2017-11-09 11:20:56
【问题描述】:

通过以下代码,我在端口 3000 上创建了一个 HTTP 服务器,并添加了一些获取参数。我想用这个 express.js 服务器代码调用一个 python 脚本,这样当我点击 localhost:3000/key1/abc/key2/234 时,python 脚本就会被调用。我已经准备好将输入参数作为 sys.argv 的 python 脚本。请建议如何使用此代码调用 python 脚本,以便它将 value1 和 value 2 作为输入参数并返回 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");
});

【问题讨论】:

    标签: python node.js http express server


    【解决方案1】:

    要从 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
    • var arg1 = req.params.value1; var arg2 = req.params.value2; const ls = spawn('python', ['script.py', arg1, arg2]);这是正确的吗?
    • 赞成,但如果我想要一个无限的 python 进程运行并且表达需要与之通信,我该怎么办
    【解决方案2】:

    如果你想用参数执行它

    const scriptExecution = spawn(pythonExecutable, ["my_Script.py", "Argument 1","Argument 2"]);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-21
      • 1970-01-01
      • 2017-04-27
      • 1970-01-01
      • 2016-02-26
      • 1970-01-01
      • 2016-07-03
      • 1970-01-01
      相关资源
      最近更新 更多