在NodeJS中获取执行ssh-client的结果

时间:2016-03-24 21:36:04

标签: node.js function ssh return

我试图在我的代码中从ssh-client块外部检索变量 stdout 的内容:

var SSH = require('simple-ssh');

var ssh = new SSH({
host: 'localhost',
user: 'username',
pass: 'password'
});

ssh.exec('echo $PATH', {
    out: function(stdout) {
    console.log(stdout);
}
}).start();

我需要这个变量的数据,因为在代码的另一部分我需要用另一个函数解析它(删除\ n并删除' |'作为分隔符和方法&#34 ;拆分")并使用oracledb-module将此信息写入Oracle数据库。 我还尝试将ssh.exec与变量关联起来,如下所示:

var retreiveData = function ssh.exec('echo $PATH', {
    out: function(stdout) {
    console.log(stdout); // I tried to change it to "return stdout;"
}
}).start();
console.log(retrieveData());

但这对我没有用。 求你帮帮我。

1 个答案:

答案 0 :(得分:1)

这是一种具有异步性质的回调模式。因此,为了保持stdout回调函数处理程序中返回的out所代表的数据,您需要在

行中执行某些操作。
var SSH = require('simple-ssh');

function echo(callback) {
  var ssh = new SSH({
    host: 'localhost',
    user: 'username',
    pass: 'password'
  });

  var data = '';
  var error = null;

  ssh.exec('echo $PATH', {
    out: function(stdout) {
      data += stdout;
    },
    exit: function(code) {
      if (code != 0) return callback(new Error('exit code: ' + code));

      // here's all the data you have persisted from stdout
      return callback(error, data);
    },
    error: function(err) {
      error = err;
    }
  }).start();
}

echo(function(err, data) {
  if (err) {
    // handle potential err
    console.error(err.stack);
  } else {
    // work with data as intended
    console.log(data);
  }
});