我尝试了以下代码,它显示res未定义。 我怎样才能退回标准输出?
function run_shell_command(command)
{
var res
exec(command, function(err,stdout,stderr){
if(err) {
console.log('shell error:'+stderr);
} else {
console.log('shell successful');
}
res = stdout
// console.log(stdout)
});
return res
}
答案 0 :(得分:2)
除了使用exec
函数的同步版本之外,您无法获得返回值。如果你仍然坚持这样做,你应该使用回调
function run_shell_command(command,cb) {
exec(command, function(err,stdout,stderr){
if(err) {
cb(stderr);
} else {
cb(stdout);
}
});
}
run_shell_command("ls", function (result) {
// handle errors here
} );
或者您可以将exec调用包含在promise中并使用async await
const util = require("util");
const { exec } = require("child_process");
const execProm = util.promisify(exec);
async function run_shell_command(command) {
let result;
try {
result = await execProm(command);
} catch(ex) {
result = ex;
}
if ( Error[Symbol.hasInstance](result) )
return ;
return result;
}
run_shell_command("ls").then( res => console.log(res) );
答案 1 :(得分:0)
在这种情况下,child_process的结果值将在stdout中。为什么它不适合你?还在这里
if(err) {
console.log('shell error:'+stderr);
}
为什么要检查err
并记录stderr
?
答案 2 :(得分:0)
你的函数看起来像asynchrone,所以要在run_shell_command之外得到你的响应,你必须使用这样的回调函数:
function run_shell_command(command, callback) {
exec(command, function (err, stdout, stderr) {
if (err) {
callback(stderr, null);
} else {
callback(null, stdout);
}
});
}
run_shell_command(command, function (err, res) {
if (err) {
// Do something with your error
}
else {
console.log(res);
}
});
您还可以像这样简化run_shell_command函数:
function run_shell_command(command, callback) {
exec(command, callback);
}
希望它有所帮助。