child_process.spawn `data` событие объединяет несколько очищенных сообщений стандартного дочернего процесса, но только при вызове console.log - PullRequest
0 голосов
/ 27 марта 2020

С child_process.spawn я запускаю программу на C ++. Программа выводит имена файлов и сбрасывает вывод:

for(int i = 0; i < segments.size(); i++){
  // <write file to disk>
  std::cout << i << ".png" << std::flush;
}

Сценарий узла, обрабатывающий вывод программы, выглядит следующим образом:

const spawn = require('child_process').spawn;

const segutil = spawn('segutility', []);
const files = [];

segutil.on('data', data => {
  const f = data.toString();
  files.push(f);
  console.log(f);
});

segutil.on('close', () => {
  console.log(files);
});

Вывод сценария выше:

0.png
1.png2.png
3.png
4.png
5.png
[ '0.png', '1.png2.png', '3.png', '4.png', '5.png' ]

Но если я уберу console.log из обработчика data, я получу следующее:

segutil.on('data', data => {
  const f = data.toString();
  files.push(f);
});

Вывод:

[ '0.png', '1.png', '2.png', '3.png', '4.png', '5.png' ]

Почему вставка console.log меняет поведение события data? Те же два имени файла объединяются в нескольких выполнениях.

...