与命令行客户端交互

时间:2014-11-28 14:13:13

标签: javascript node.js

我必须执行一些我想用给定的参数集执行的命令行程序。

问题是,那些命令行程序在某些时候要求输入用户名和密码。根据他们的文档,不可能将这些参数作为附加参数传递,但必须手动输入。

如何使用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
});

2 个答案:

答案 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');
});