【发布时间】:2018-04-28 05:26:39
【问题描述】:
我有以下代码。我首先上传文件,然后读取文件和console 的输出,如console.log(obj)。但是响应首先出现,python 脚本在幕后运行。 如何让代码等待 python 脚本运行然后继续?
router.post(`${basePath}/file`, (req, res) => {
//Upload file first
PythonShell.run('calculations.py', { scriptPath: '/Path/to/python/script' }, function (err) {
console.log(err);
let obj = fs.readFileSync('Path/to/file', 'utf8');
console.log(obj);
});
return res.status(200).send({
message : 'Success',
});
});
我无法获得console.log(obj); 输出,因为它在响应之后运行。 如何让它等待 python 脚本运行并在控制台上获得console.log(obj) 输出。
【问题讨论】:
-
尝试将
res.status(200).send移动到第三个PythonShell.run参数回调主体的末尾。这将在脚本完成后发送 200 响应。 -
你想在那个 POST 请求上响应脚本的运行结果吗?你在控制台输出中看到
console.log(obj)的结果了吗? -
@dhilt 不,我在控制台中看不到
console.log(obj)的输出。我想将响应作为console.log(obj)的输出返回。 -
好吧,我刚试着给出答案。
-
从代码中我只能看到
let obj = fs.readFileSync('Path/to/file', 'utf8');不起作用,检查文件是否有内容或文件,如果没有内容则只有这将是一个错误。请调试一次。
标签: javascript python node.js express asynchronous