2017-01-19 6 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

これが可能な方法

あなたのコマンドラインプログラムです: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); 
}) 
は、
+0

これでも、出力はconsole.log(data)に送信されます。私が必要とするのは、出力を文字列として返すか、ローカル変数にデータの値を保持させるための関数呼び出しcommandLine( 'ping'、function(err、data){...})です。ありがとう – John

+0

いくつかのデータを取得したら、それを任意のローカル変数に割り当てることができます。重要なことは、コールバックを使用してデータを送信する方法です。 – user3151330

関連する問題