使用 Nodejs 生成过程的响应

问题描述 投票:0回答:1

我在其他几篇帖子中看到有些人谈论过这个问题,但没有一个是太重要的。

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
变量使用响应中的数据进行更新?

干杯

node.js process spawn
1个回答
0
投票

解决方案是按照 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)
  }

}
© www.soinside.com 2019 - 2024. All rights reserved.