我使用此方法将命令作为字符串传递。但我不想将其输出到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
}
});
};

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