У меня есть script, который я хочу запустить из другого. Проблема заключается в том, что дочерний элемент script (process) требует ввода пользователя до его продолжения.
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');
});
После ввода моих данных дочерний элемент script должен продолжаться, но вместо этого он находится там.
Решение
На самом деле приведенный выше код работает для меня. Я использую commander.js в дочернем script, чтобы пригласить пользователя к действию. Вот как я отвечаю на приглашение script для ребенка:
child.stdout.on('data', function (data) {
switch (data.toString().trim()) {
case 'Username:':
child.stdin.write('user');
break;
case 'Password:':
child.stdin.write('pass');
break;
}
});
То же самое работает с suppose:
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();
});