NodeJS child_process.spawn() усекает длинный вывод

#node.js #stdout #truncate #spawn #pipewire

Вопрос:

Из NodeJS v16.4.2 я запускаю команду ( pw-dump -m ) для вывода и мониторинга текущего состояния трубопровода.

Команда сначала выводит все состояние Pipewire в виде длинной строки JSON в stdout, а затем всякий раз, когда состояние изменяется, она выводит массив в кодировке JSON, содержащий все измененные объекты.

Команда не завершается после вывода, поэтому ее необходимо создать и прочитать из NodeJS во время выполнения.

Я хочу считывать новые данные всякий раз, когда новые данные отправляются в stdout команды, и обновлять кэш моей программы NodeJS о состоянии Pipewire.

Команда нормально работает в терминале.

Это код, который я использую в NodeJS:

 const { spawn } = require('child_process');
var testExec = spawn('pw-dump',['-m']);
testExec.stdout.on('data',function(chunk){
    var str = chunk.toString();

    // do anything here
    console.log(str);
});
 

С помощью этого кода я получаю данные в виде фрагментов разного размера, но один или несколько из этих фрагментов, похоже, усечены, включая последний. Ни один из фрагментов не напоминает конец вывода команды.

Кроме того, NodeJS не получает новые фрагменты данных всякий раз, когда команда отправляет их — кажется случайным, вызывает ли это событие «данные» объекта stdout или нет.

Я предполагаю, что это где-то проблема с размером буфера, или NodeJS ждет, пока у него не будет определенной длины данных, прежде чем выводить их, хотя в любом случае я не знаю, что попробовать.

Заранее спасибо.