Я пытаюсь получить правильный код выхода из пакетного файла с помощью nodejs в Windows.child_process не возвращает правильный код выхода из командного файла
При запуске из командной строки, я вижу ожидаемый код ошибки:
ml.bat profile bootstrap
ERROR: [".../deploy/lib/RoxyHttp.rb:362:in
block in request'", ".../deploy/lib/RoxyHttp.rb:352:in
loop'", ".../deploy/lib/RoxyHttp.rb:352:inrequest'", ".../deploy/lib/MLClient.rb:110:in
go'", ".../deploy/lib/server_config.rb:1963:inget_sid'", ".../deploy/lib/server_config.rb:2056:in
execute_query_7'",".../deploy/lib/server_config.rb:510:inexecute_query'",".../deploy/lib/server_config.rb:709:in
bootstrap'", "deploy/lib/ml.rb:168:in `'"
Я проверить, что код выхода был отличен от нуля:
echo %errorlevel%
12
Ниже код сопоставления, который я использую в NodeJS, - который всегда дает код выхода 0:
var stdout = "";
let proc = child_process.spawn("ml.bat", ["profile", "bootstrap"], {shell:true});
proc.stdout.on('data', d => stdout += d.toString() + '\n';);
proc.on('close', exitcode => {
console.log(stdout);
if (exitcode !== 0) {
console.log('ERROR in command');
process.exit();
}
});
Я попытался использовать несколько вариантов (exec, execSync, spawnSync) и параметры (shell, "cmd.exe/c"), но я никогда не могу получить ненулевой код с помощью узла. Программа не печатает какой-либо вывод на stderr.
Любая идея, как вернуть правильный код ошибки в NodeJS?
Вы назвали параметр, переданный вашему обратному вызову 'exitcode', но вы проверяете' code'. Я предполагаю, что это опечатка в вашем примере кода, так как это приведет к 'ReferenceError' –
да. опечатка. благодаря! – chriskelly