问题很简单
var exec = require(‘child_process’).exec;
function ls_cmd() { exec(‘ls’, function(error, stdout, stderr){ console.log(stdout); return stdout; }); }
var cmd = new ls_cmd(); 因为执行命令exec是无阻塞+回调的方式来实现,我想封装一些方法来获取命令行的返回结果有什么办法可以解决。
从 stdout 和 stderr 里读,再用回调函数传回去。
赞
我做一个简单的例子给你看一下,,看是否符合你的要求。[我也只是一个刚自学不久的初学者, 有问题多交流] 注:async 你的用一个npm 包管理器安装一个, 如果不使用async, 那自己也可以用传函数回调的方式实现
var exec = require(‘child_process’).exec , async = require(‘async’) , my_util = require(’./util’);
exports.getSysInfo = function(req, res){
async.series(
[
function(callback){my_util.one(callback)}, //第一个命令
function(callback){my_util.two(callback)} //第二个命令
],
function (err, results)
{
res.send(my_util.formatArrayJson(results)); //这是返回值,results[0]第一个命令返回值,results[1] 第二个命令返回值, 格式化以后就可以把多个命令的值按JSON格式一起返回给前端。
});
}
----------------------util.js 文件---------------------------------
exports.formatArrayJson = function(array)
{
var result = {};
if(typeof(array) == ‘object’)
{
var len = this.objLength(array);
for(var i = 0; i < len; i++)
{
if(typeof(array[i]) == ‘object’)
{
for(key in array[i])
{
result[key] = array[i][key];
}
}
}
}
return result;
}
exports.one = function(callback)
{
exec(‘ls’, function(error, stdout, stderr){
callback(stderr, {‘hostname’:stdout});
});
}
exports.two = function(callback)
{
exec(‘ls /etc’, function(error, stdout, stderr){
callback(stderr, {‘uptime’:stdout});
});
}
直接用 shelljs 的 exec https://github.com/arturadib/shelljs ? 或者参考他的 execAsync 的实现 https://github.com/arturadib/shelljs/blob/master/src/exec.js#L98 ?