如何在node.js中的变量中存储命令行的输出?

时间:2017-01-19 22:01:51

标签: javascript node.js

我使用此方法将命令作为字符串传递。但我不想将其输出到console.log。例如,当有人调用commandLine(' aplay -L')时,将在命令行上显示的输出应作为变量或JSON响应返回。回调本身就是stdout的位置,但是如何将它返回给变量?



commandLine = function(command, callback) {
  var exec = require('child_process').exec;
  exec(command, function (err, stdout, stderr) {

    if (err && err.length > 1) {
            console.log("failed to find playback or record devices");
            callback(error("InternalError", "No input or output devices found", 500));
            return;
        }else{
        callback(stdout); //returns cmd line output 
    }  
  });
};




1 个答案:

答案 0 :(得分:0)

这是一种可能的方式

您的commandLine程序:检查calllback(null,stdout)callback(error,stderr)。另见退货。我们正在返回child_process。 这很重要,因为exec是异步的,我们应该只在stdio流关闭后得到输出

commandLine = function(command, callback) {
  var exec = require('child_process').exec;
  var child_process = exec(command, function (err, stdout, stderr) {

    if (err && err.length > 1) {
            console.log("failed to find playback or record devices");
            callback(error("InternalError", "No input or output devices found", 500));
            return;
        }else{
            if(stdout){
                    callback(null,stdout); //returns cmd line output 
            }
            if(stderr){
                callback(new Error("STDERR"),stderr);
            }

    }  
  });
  return child_process;
};

调用stdout的调用者(因为ping是一个有效的命令):

var cmd_output = '';

var cp = commandLine('ping',function(err,data){
    console.log("Callback called");
    if(err){
        console.log(err);
    }
    cmd_output = Buffer.from(data).toString('utf8');
})

cp.on('close',function(){
    //cmd_output is already populated above. If you want just console.log here or leave it
    console.log(cmd_output);
})