NodeJS дочерний процесс stdout не возвращается полностью - PullRequest
0 голосов
/ 31 октября 2019

Я запускаю следующий код с использованием узла, и я всегда получаю только около 80% того, что должен вернуть стандартный вывод, когда файл превышает 12ko или около того. Если файл 240ko, он все равно будет выводить 80%. Если он меньше 12, он выведет полностью.

Когда я открываю cmd и запускаю команду вручную, я всегда получаю полный вывод.

Я пробовал exec, execFile, я пытался увеличить максимальный буфер или изменить кодировку, и это не проблема,Я попытался добавить опции {shell: true, detached: true}, но, на самом деле, когда я запускаю его как отсоединенный, он работает совершенно бесполезно, и, похоже, он работает совершенно нормально, так как открывает настоящую консоль, но я не могу получить стандартный вывод после завершения процесса. .

const spawn = require('child_process').spawn;
const process = spawn(
    'C:\\Users\\jeanphilipped\\Desktop\\unrtf\\test\\unrtf.exe',
    ['--html' ,'C:\\Users\\jeanphilipped\\Desktop\\unrtf\\test\\tempaf45.rtf'],
);

let chunks = [];

process.stdout.on('data', function (msg) {
    chunks = [...chunks, ...msg];
});

process.on('exit', function (msg) {
   const buffer = Buffer.from(chunks);
   console.log(buffer.toString());
});

Есть какие-нибудь подсказки? Кажется, это Node, так как, когда я запускаю его вручную, все работает нормально.

1 Ответ

0 голосов
/ 31 октября 2019

согласно документации nodejs, все команды child_process являются асинхронными. поэтому, когда вы пытаетесь получить доступ к вашей переменной chunk, нет никакой гарантии, что ваша команда была выполнена, возможно, ваша команда все еще в процессе. поэтому рекомендуется поместить всю команду child_process в функцию async / await.

...