Напишите на порожденный процесс stdin nodejs?

У меня есть сценарий, который я хочу запустить из другого. Проблема в том, что дочерний скрипт (процесс) требует ввода пользователя до его продолжения.

var child = spawn('script'); child.stdin.setEncoding('utf8'); child.stdout.on('data', function (data) { console.log(data.toString().trim()); // tells me to input my data child.stdin.write('my data\n'); }); 

После ввода моих данных дочерний скрипт должен продолжаться, но вместо этого он зависает там.

Решение

На самом деле приведенный выше код работает для меня. Я использую commander.js в дочернем скрипте, чтобы побудить пользователя к действию. Вот как я отвечаю на приглашение скрипта для ребенка:

 child.stdout.on('data', function (data) { switch (data.toString().trim()) { case 'Username:': child.stdin.write('user'); break; case 'Password:': child.stdin.write('pass'); break; } }); 

То же самое работает с предположением :

 var suppose = require('suppose'); suppose('script') .on('Username: ').respond('user') .on('Password: ').respond('pass') .error(function (err) { console.log(err.message); }) .end(function (code) { console.log(code); done(); }); , var suppose = require('suppose'); suppose('script') .on('Username: ').respond('user') .on('Password: ').respond('pass') .error(function (err) { console.log(err.message); }) .end(function (code) { console.log(code); done(); }); 

Вы можете использовать пакет. Это похоже на Unix Expect . Полное раскрытие, я автор.

В примере на странице Github вы можете увидеть пример его сценария NPM: https://github.com/jprichardson/node-suppose

Пример:

 var suppose = require('suppose') suppose('script') .on(/\w*/).respond('my data\n') .end(function(code){ console.log('Done: ' + code); }) , var suppose = require('suppose') suppose('script') .on(/\w*/).respond('my data\n') .end(function(code){ console.log('Done: ' + code); })