С 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
? Те же два имени файла объединяются в нескольких выполнениях.