我正在尝试执行这段执行python脚本的节点js代码。通过此代码工作正常。但响应“运行”和“完成”立即显示在前端。一旦python脚本的执行完成,就必须显示“finshed”。
app.post('/execute', function(request, response){
response.write("running");
console.log("executing")
var pyshell = new PythonShell('./python_codes/test.py')
pyshell.on('message', function (message) {console.log(message);});
pyshell.end(function (err) {if (err){throw err;};console.log('finished');});
response.write("finished");
response.end();
});
答案 0 :(得分:1)
这是因为PythonShell
类是异步的。您的代码正在做的是创建一个PythonShell
对象,将其存储在变量pyshell
中,然后向pyshell
对象添加一些事件。然后它直接继续写“完成”。
因为写“完成”不是end()
函数回调的一部分,所以它立刻就会发生。我看到你至少可以做三件事:
response.write("finished"); response.end();
代码添加到pyshell.end
回调。答案 1 :(得分:1)
您应该在回调函数
中添加您的响应app.post('/execute', function(request, response){
response.setHeader('Connection', 'Transfer-Encoding');
response.setHeader('Content-Type', 'text/html; charset=utf-8');
response.write("running");
console.log("executing")
var pyshell = new PythonShell('./python_codes/test.py')
pyshell.on('message', function (message) {console.log(message);});
pyshell.end(function (err) {
if (err){
throw err;
};
console.log('finished');
response.write("finished");
response.end();
});
});