2017-01-19 4 views
0

Я использую этот метод для передачи команды в виде строки. Но я не хочу просто выводить его на console.log. Например, когда кто-то вызывает commandLine ('aplay -L'), вывод, который будет отображаться в командной строке, должен быть возвращен как переменная или ответ JSON. Самым обратным вызовом является то, где находится stdout, но как вернуть его переменной?Как сохранить вывод командной строки в переменной в node.js?

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

ответ

0

Это возможный путь

Ваш CommandLine программа: Проверьте calllback(null,stdout) и callback(error,stderr). Также см. Возврат. Мы возвращаем child_process. Это важно, поскольку ехес является асинхронным, мы должны получить выход только после того, как 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; 
}; 

Вызывающих, где стандартный вывод вызывается (с пингом это допустимая команда):

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); 
}) 
+0

Это все равно приводит к тому, что вывод отправляется на console.log (данные). Мне нужна функция callLineLine ('ping', function (err, data) {...}, чтобы возвращать результат в виде строки или иметь локальную переменную, хранящую значение данных. Наличие в console.log isn ' что мне нужно вообще. спасибо – John

+0

Когда вы получаете некоторые данные, вы можете назначить их любой локальной переменной. Важно то, как вы отправляете данные с помощью обратного вызова. Я обновлю полный пример. – user3151330

Смежные вопросы