我试图从用户那里获取图像作为输入,并使用python处理它,然后在节点js中显示处理后的结果。为此,用户首先上传图像,然后将其保存在uploads文件夹中。然后,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脚本。
上传仅使用multer来保存图像。
我的图片标签看起来像-<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;
答案 0 :(得分:0)
如果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()是异步的,使其同步以在解析结束后返回解析。