所以我想在我的 node.js 程序结束时运行一个 shell 命令,并在退出之前等待输出/打印它。我尝试process.on('exit',function(){})
在那里运行 child exec 命令,但程序在回调之前退出。因此,我在 process.exit 上使用了一个闭包,但我得到了一些奇怪的结果。代码的基础是:
process.exit = (function(old_exit){
return function(code){
var exec = require('child_process').exec;
var child;
child = exec("my shell command", function (error, stdout, stderr) {
if (error !== null) {
console.log('exec error: ' + error);
}
console.log(stdout);
//I first had this as the concluding line:
old_exit.apply(process,arguments);
//and I also tried
old_exit.apply(process,[]);
//and even (which I know is not in the right scope)
old_exit(code);
//and also
process.exit = old_exit;
process.exit(code);
});
}
}(process.exit));
上述每一个结果都执行了我的 shell 命令两次,然后退出。我也尝试在最后不调用任何东西,虽然它保留它以便我的命令只执行一次,但进程挂起而不是最后退出。除非我只是缺少某些东西,否则我觉得我的第一次尝试old_exit.apply(process,arguments);
将是正确的方法,不应该再次调用我自己的代码,它确实如此。我还尝试了无效的使用过的承诺(它甚至没有因为被多次解决而引发错误),并且我尝试使用布尔值来判断它是否已设置,但这也不起作用。我最后什至尝试在回调完成后抛出一个错误,但这迫使 process.exit 在错误后再次被调用。有任何想法吗?