我必须执行一些我想用给定的参数集执行的命令行程序。
问题是,那些命令行程序在某些时候要求输入用户名和密码。根据他们的文档,不可能将这些参数作为附加参数传递,但必须手动输入。
如何使用node.js以编程方式输入这些参数?
所以基本上我想让用户一次获取他/她的凭据,然后每次询问他们时,自动输入。
我能够从命令行读取用户名和密码,但我无法将其传递给其他程序。
这是我目前的做法
// get username/password using readline
// execute next script
var exec = require('child_process').exec;
exec( 'someCommandClient -with Parameters', function( err , stdout, stderr ){
// error handling
if( err ){
console.log( err );
return
}
// XXX here we should react on being prompted for username and password
});
答案 0 :(得分:0)
我认为您可以尝试使用nexpect(或类似具有bash expect
的模块 - 支持)
答案 1 :(得分:0)
为了使您的代码更简单,我建议您在查询用户数据时使用readline-sync module,而不是使用原生代码。
如果您想与子进程交互,则无法使用child_process.exec,但必须使用child_process.spawn(前者等待子进程退出以调用您的回调)
然后,要将用户名或密码传递给子进程,您必须写入其stdin流 http://nodejs.org/api/child_process.html#child_process_child_stdin
像这样的事情应该做的工作
var child = require('child_process').spawn('someprocess');
child.stdout.on('data', function(data) {
if (data === 'Login: ')
child.stdin.write('Sirko');
});