我在其他几篇帖子中看到有些人谈论过这个问题,但没有一个是太重要的。
async function decodeCopyCommand(toDecode) {
let output = '';
const spawn = require("child_process").spawn;
const pythonProcess = spawn('python3', ["/home/isaac/Documents/gitlab/aievr-web/exfil_webpage/monitor.py","--decode", JSON.stringify(toDecode)]);
pythonProcess.stdout.on('data', (data) => {
output+=data
});
// Wait 2 seconds before parsing output. Otherwise output is 'undefined'
await setTimeout(2000);
console.log("Waited 2s");
const jsonOutput = JSON.parse(output)
console.log(jsonOutput)
return jsonOutput
}
等待 2 秒让
pythonProcess.stdout.on()
更新输出变量是我所能想到的。它可以工作,但也非常愚蠢并且容易出错。
是否有更好的方法来等待
output
变量使用响应中的数据进行更新?
干杯
解决方案是按照 tkausl 的建议监听子进程上的关闭事件。
这是更新后的代码:
async function decodeCopyCommand(toDecode) {
let output = '';
let processRunning = true
const spawn = require("child_process").spawn;
const pythonProcess = spawn('python3', ["/home/isaac/Documents/gitlab/aievr-web/exfil_webpage/monitor.py","--decode", JSON.stringify(toDecode)]);
pythonProcess.stdout.on('data', (data) => {
output+=data
});
pythonProcess.on('close', (code) => {
console.log(`child process close all stdio with code ${code}`);
processRunning = false
});
while(processRunning){
await setTimeout(200); // Wait 200ms before checking processRunning again
}
if (!processRunning){
return JSON.parse(output)
}
}