sim*_*imo 14 stdin stream child-process node.js
我有一个脚本,我想从另一个脚本运行.问题是子脚本(进程)在继续之前需要用户输入.
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');
});
Run Code Online (Sandbox Code Playgroud)
输入数据后,子脚本应继续,但它会挂在那里.
实际上上面的代码对我有用.我在子脚本中使用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;
}
});
Run Code Online (Sandbox Code Playgroud)
同样的事情与假设一起工作:
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();
});
Run Code Online (Sandbox Code Playgroud)
JP *_*son 11
你可以使用这个包suppose
.这就像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);
})
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
10594 次 |
最近记录: |