我有一个要从另一个脚本运行的脚本。问题在于子脚本(进程)在继续之前需要用户输入。
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(); });
您可以使用该包suppose。就像Unix Expect一样。完全公开,我是作者。
suppose
从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); })