等待 python 脚本在节点 js 中执行



我正在尝试从用户那里获取图像作为输入并使用python对其进行处理,然后在节点js中显示处理后的结果。为此,用户首先上传图像,然后将其保存在上传文件夹中。然后,python脚本获取该图像并对其进行处理并将其保存在相同的位置。最后,我显示新图像。 我尝试使用异步语句和承诺,但它们似乎不起作用。

app.post("/image", function(req, res){
upload(req, res, (err)=> {  
if(err){
res.render('upload', {
msg: err
});
} else {
const promise = call_python(req, res);
res.render('upload', {
file: `./uploads/detected.png`
});
}
})
}) 

call_python使用 spawn 调用 python 脚本。

上传只是使用穆特来保存图像。

我的图像标签看起来像 -<img src="<%= typeof file != 'undefined' ? file : '' %>" class="responsive-img">

编辑:我现在包括call_python如下。

async function call_python (req, res) {
var spawn = require("child-process-promise").spawn;
let promise = await new Promise((reject, resolve) => {
try {
spawn('python', ["script.py"], {capture: ['stdout', 'stderr', 'on']})
resolve(1)
}
catch (err) { console.log(err)}
}).catch(()=> {})
return promise;

如果 call_python(( 函数异步,您所要做的就是:

app.post("/image", function(req, res){
upload(req, res, async (err)=> {  
if(err){
res.render('upload', {
msg: err
});
} else {
await call_python(req, res);
res.render('upload', {
file: `./uploads/detected.png`
});
}
})
})

在执行下一个命令之前,您必须"等待"它完成。

对于call_functiom:

async function call_python (req, res) {
const spawnSync = require("child-process-promise").spawnSync;
return new Promise((reject, resolve) => {
try {
spawnSync('python', ["script.py"], {capture: ['stdout', 'stderr', 'on']})
resolve(1)
}
catch (err) { console.log(err)}
}).catch(()=> {})
}

您需要了解 spwan(( 是异步的,使其同步以在结束后返回解析。

最新更新