初学者,谁能帮帮怎么解决。
发布于 11 年前 作者 nhlax2012 4109 次浏览 最后一次编辑是 8 年前

问题很简单

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是无阻塞+回调的方式来实现,我想封装一些方法来获取命令行的返回结果有什么办法可以解决。

4 回复

从 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}); }); }

回到顶部