NodeJS child_process.spawn() обрезает длинный вывод
Из NodeJS v16.4.2 я запускаю команду (
pw-dump -m
) для вывода и мониторинга текущего состояния Pipewire.
Сначала команда выводит все состояние Pipewire в виде длинной строки JSON на стандартный вывод, а затем при каждом изменении состояния выводит массив в формате JSON, содержащий все измененные объекты.
Команда не завершается после вывода, поэтому ее необходимо создать и прочитать из NodeJS во время работы.
Я хочу читать новые данные всякий раз, когда новые данные отправляются на стандартный вывод команды, и обновлять кеш моей программы 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 ждет, пока у него не будет определенной длины данных, прежде чем выводить их, хотя в любом случае я не знаю, что попробовать.
Заранее спасибо.