我有一个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
答案 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}`);
});