写衍生进程标准输入的NodeJS?(Write to spawned process stdin n

2019-07-04 08:09发布

我有我想从另外一个运行的脚本。 问题是,孩子脚本(过程)需要一个用户输入后再继续。

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();
});

Answer 1:

你可以使用包suppose 。 这就像Unix的期待 。 充分披露,我是作者。

从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); 
})


文章来源: Write to spawned process stdin nodejs?