Как перехватить и сохранить в переменную выходной поток команды в node.js? - PullRequest
1 голос
/ 28 мая 2019

У меня есть этот скрипт, который правильно запускает синхронно команду ls и выводит результат в терминал. Как я могу перехватить результат и сохранить его в переменной?

const cp = require('child_process');
const result = cp.spawnSync(
    'ls',
    ['-l', '/usr'],
    { stdio: [process.stdin, process.stdout, process.stdout] }
);

Если я попробую это, как предложено https://stackoverflow.com/a/30617874/693271

result.stdout.on('data', function (chunk) {
    console.log(chunk);
});

Я получаю

result.stdout.on('data', function (chunk) {
              ^
TypeError: Cannot read property 'on' of null

Разница в том, что примерно spawnSync, а не spawn

1 Ответ

1 голос
/ 28 мая 2019

Посмотрев на документы , мы видим, что результат spawnSync возвращает объект, содержащий ключ с именем stdout, который является Buffer.Вам не нужно прослушивать события, так как вы вызываете синхронную версию spawn - процесс будет ждать завершения команды до ее возобновления, а затем возвращает результат.

Так что в вашем случаерезультат вашей команды ls -l /usr можно прочитать с помощью result.stdout.toString().Вам также необходимо сохранить конфигурацию по умолчанию для stdio в опциях.

...