如何从 child_process.exec() 设置变量
How to set variable from child_process.exec()
我有一个简单的功能运行 来自网络的系统应用程序。
server.route({
method: 'POST',
path: '/executeMain',
handler: (req, res) => {
var success = false;
exec("./main", (error, stdout, stderr) => {
if (error) {
console.log('error: ' + error.message);
return;
}
if (stderr) {
console.log('error: ' + stderr);
return;
}
console.log(stdout);
success = true;
});
if (success) {
return res.response("OK").code(200);
}
else {
return res.response("ERR").code(500);
}
}
});
在 exec 函数中,我想将 success 设置为 true,但它从来没有发生过。任何人都可以帮助我并向我解释为什么这是行不通的。
child_process.exec()
是一个异步函数。因此进程立即启动 运行 后台和函数 returns。因此,您要在进程完成之前和设置之前检查 success
的值。
您的处理程序也需要是异步的,因为它依赖于异步函数的 return 值。类似于:
server.route({
method: 'POST',
path: '/executeMain',
handler: (req, res) => {
return new Promise( (resolve, reject) => {
exec("./main", (error, stdout, stderr) => {
if (error) {
console.log('eror: ' + error.message);
reject( res.response("ERR").code(500) )
}
if (stderr) {
console.log('error: ' + stderr);
reject( res.response("ERR").code(500) )
}
console.log(stdout);
resolve( res.response("OK").code(200) )
});
});
}
另一方面,您可能不想仅仅因为 stderr
为真就抛出错误。许多程序即使在成功时也会写入 stderr。
我有一个简单的功能运行 来自网络的系统应用程序。
server.route({
method: 'POST',
path: '/executeMain',
handler: (req, res) => {
var success = false;
exec("./main", (error, stdout, stderr) => {
if (error) {
console.log('error: ' + error.message);
return;
}
if (stderr) {
console.log('error: ' + stderr);
return;
}
console.log(stdout);
success = true;
});
if (success) {
return res.response("OK").code(200);
}
else {
return res.response("ERR").code(500);
}
}
});
在 exec 函数中,我想将 success 设置为 true,但它从来没有发生过。任何人都可以帮助我并向我解释为什么这是行不通的。
child_process.exec()
是一个异步函数。因此进程立即启动 运行 后台和函数 returns。因此,您要在进程完成之前和设置之前检查 success
的值。
您的处理程序也需要是异步的,因为它依赖于异步函数的 return 值。类似于:
server.route({
method: 'POST',
path: '/executeMain',
handler: (req, res) => {
return new Promise( (resolve, reject) => {
exec("./main", (error, stdout, stderr) => {
if (error) {
console.log('eror: ' + error.message);
reject( res.response("ERR").code(500) )
}
if (stderr) {
console.log('error: ' + stderr);
reject( res.response("ERR").code(500) )
}
console.log(stdout);
resolve( res.response("OK").code(200) )
});
});
}
另一方面,您可能不想仅仅因为 stderr
为真就抛出错误。许多程序即使在成功时也会写入 stderr。