Захват ввода в дочернем процессе после появления в узле - PullRequest
0 голосов
/ 19 ноября 2018

Я работаю над небольшим инструментом cli, который может автоматически развертывать действия Google Home на основе проектов, настроенных в каталоге.

В основном мой скрипт проверяет каталоги, а затем спрашивает, какой проект развернуть. Фактическая команда, которая должна быть запущена, поступает из Google Cli Gactions

Чтобы запустить его с аргументами, я настроил порожденный процесс в своем скрипте узла:

const { spawn } = require('child_process')
const child = spawn('./gactions', [
    'update',
    '--action-package',
    '<PATH-TO-PACKAGE>',
    '--project',
    '<PROJECT-NAME>'
])

child.stdout.on('data', data => {
    console.log(data)
}

Тем не менее, при первом развертывании проекта группа g Cli будет запрашивать код авторизации. Запустив приведенный выше код, я на самом деле вижу подсказку, но сценарий не запускается при вводе этого кода.

Полагаю, в дочернем процессе должен быть какой-то способ захватить этот ввод? Или это вообще невозможно?

1 Ответ

0 голосов
/ 22 ноября 2018

Просто перенаправьте все стандартные входные данные от родительского процесса к дочернему, и все выходные данные от дочернего к родительскому процессу.

Приведенный ниже код является полной оболочкой для любой команды оболочки с перенаправлением ввода / вывода / ошибки:

const { spawn } = require('child_process');
var child = spawn(command, args);

child.stdout.pipe(process.stdout);
child.stderr.pipe(process.stderr);
process.stdin.pipe(child.stdin);

child.on('exit', () => process.exit())

Обратите внимание, что если вы передаете stdout, вам больше не нужно обрабатывать событие data.

...