Node.js子进程运行python代码无响应

时间:2018-08-15 10:52:18

标签: node.js python-3.x express

我有一个Express Node.js应用程序,但是我想运行python代码(发送数据并接收结果) 但是当我使用邮递员进行测试时,仍在加载并且没有任何响应。

我的node.js代码

    router.get('/name', callName);

function callName(req, res) {
    var exec = require("child_process").exec;
    var process = exec('python',["./hello.py",
                             req.query.firstname,
                             req.query.lastname
                          ] );
    process.stdout.on('data', function(error,data) {
      console.log('stderr: ', error);
        res.send(data.toString());
    } )
}

python代码

import sys
# Takes first name and last name via command
# line arguments and then display them
print("Output from Python")
 print("First name: " + sys.argv[1])
 print("Last name: " + sys.argv[2])

# Save the script as hello.py

谢谢@nijm我找到了解决方法

  • 首先 child_process.exec方法不接受命令参数作为数组(就像child_process.spawn一样)。

  • 您必须在您的计算机上安装了python。

  • 第三名

    您必须在公共文件夹(在我的情况下为uploads文件夹)中有python文件

    所有这些步骤都没有在任何教程或有关如何从Node.js调用Python函数的示例中提及

一天结束,我的代码是

router.get('/name', callName);

function callName(req, res) {
var exec = require("child_process").exec;
exec(`python uploads/hello.py ${req.query.firstname} ${req.query.lastname}`, (error, stdout, stderr) => {
  if (error) {
    console.error(`exec error: ${error}`);
    return;
  }
  console.log(`stdout: ${stdout}`);
  console.log(`stderr: ${stderr}`);
});
}

python代码

import sys
# Takes first name and last name via command
# line arguments and then display them
print("Output from Python")
print("First name: " + sys.argv[1])
print("Last name: " + sys.argv[2])

# Save the script as hello.py

1 个答案:

答案 0 :(得分:1)

child_process.exec方法不接受命令参数作为数组(就像child_process.spawn一样),请尝试此操作(未经测试):

var exec = require("child_process").exec;
exec(`python ./hello.py ${req.query.firstname} ${req.query.lastname}`, (error, stdout, stderr) => {
  if (error) {
    console.error(`exec error: ${error}`);
    return;
  }
  console.log(`stdout: ${stdout}`);
  console.log(`stderr: ${stderr}`);
});