因此,我正在尝试从要使用exec
执行的命令中返回标准输出。但是,由于exec
是异步的,因此在响应发送undefined
输出之前,我似乎无法返回标准输出。由于我正在使用router.post
函数(甚至是名字),因此回调和async / await似乎对我没有帮助。
这是我用于执行的代码。
router.post("/select", (req, res, next) => {
const imageLocation = "backend/images/" + req.body.imagePath;
const execString = 'python backend/volatility/vol.py -f ' + imageLocation + ' imageinfo | grep "Suggested Profile(s) :"'
let output;
exec(execString, (err, stdout, stderr) => {
if (err) {
console.log(err);
}
output = stdout;
console.log(stdout);
});
console.log(output);
res.status(200).json({
message: "test",
output: output
})
console.log(req.body.imagePath);
})
我想发生的是在output
设置之后发送exec
的响应
我可能忽略了一些明显的事情,但是我只是没有看到它。我到处都看了,似乎找不到答案。
编辑:
对已经做出如此快速反应的人们表示抱歉。我正在尝试使响应速度更快,我认为那边可能做错了什么。
这是我的log.service.ts,具有相关功能:
setImage(imagePath: any) {
let response;
this.http.post("http://localhost:3000/api/log/select", imagePath).subscribe((responseData) => {
response = responseData;
return response;
});
}
这是与html模板一起使用的组件:
imageChosen(event: any) {
console.log({imagePath: event.value});
this.suggestedProfile = this.logService.setImage({imagePath: this.selectedImage});
console.log(this.suggestedProfile);
}
也许与subscribe()
部分有关?
对不起,造成混乱!
答案 0 :(得分:2)
您可以尝试像这样更改代码
router.post("/select", (req, res, next) => {
const imageLocation = "backend/images/" + req.body.imagePath;
const execString = 'python backend/volatility/vol.py -f ' + imageLocation + ' imageinfo | grep "Suggested Profile(s) :"'
let output;
exec(execString, (err, stdout, stderr) => {
if (err) {
console.log(err);
} else {
output = stdout;
console.log(stdout);
res.status(200).json({
message: "test",
output: output
})
console.log(req.body.imagePath);
}
});
})
答案 1 :(得分:0)
在这种情况下:
setImage(imagePath: any) : Observable<string> {
return(this.http.post("http://localhost:3000/api/log/select", imagePath));
}
imageChosen(event: any) {
console.log({imagePath: event.value});
this.logService.setImage({imagePath: this.selectedImage}).subscribe((response) => {
this.suggestedProfile = response;
console.log(this.suggestedProfile);
});
}