Итак, я хотел запустить команду оболочки в конце моей программы node.js и дождаться вывод/распечатка перед выходом. Я попробовал process.on('exit',function(){})
и запустил там дочернюю команду 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));
Каждый из приведенных выше результатов выполнил мою команду оболочки ровно дважды, а затем завершился. Я также пытался ничего не вызывать в конце, и хотя это сохраняло его, так что моя команда выполнялась только один раз, процесс зависал вместо выхода в конце. Если нет чего-то, что я просто упускаю, я чувствую, что первая попытка old_exit.apply(process,arguments);
у меня была бы правильной и не должна снова вызывать мой собственный код, так и есть. Я также пробовал использовать промисы, которые не работали (они даже не выдавали ошибку из-за многократного разрешения), и я пытался использовать логическое значение, если оно было установлено, но это тоже не сработало. Наконец, я даже попытался выдать ошибку после завершения обратного вызова, но это заставило process.exit снова вызываться после ошибки.Есть идеи?