Пакетный файл не получает ERRORLEVEL из запускаемого им скрипта Python

У меня есть пакетный файл, в котором запущен скрипт Python.
Этот скрипт Python всегда заканчивается с помощью sys.exit(code), несмотря ни на что, при этом код является кодом ошибки.
Пакетный файл не получает мой код ошибки и вместо этого всегда читает 0 с следующее:

..\..\STS\Python\python.exe Version_code_ID.py %*  
echo Error level = %ERRORLEVEL%

Эта установка python находится в версии 3.7.1.
Я точно знаю, что мой код python вышел с кодами, отличными от 0, благодаря моему регистратору (и я добровольно вызвал ошибки для целей тестирования).
Например, у меня был выход с 1 и 12, обе попытки привели к получению 0 в пакете.

На всякий случай вот также функция Python, которую я использую для выхода:

def exit(code):
    if(code > 0 ):
        log.error("The computing module will shutdown with the following error code : "+str(code))
    elif(code == 0):
        log.info("Execution sucessfull")
    log.info("STOP of VERSION_CODE_ID Computing Module")
    log.removeHandler(stream_handler)
    log.removeHandler(file_handler)
    stream_handler.close()
    file_handler.close()
    sys.exit(code)

log — это просто имя моего регистратора logging.handlers.

Есть идеи, что может быть причиной этой проблемы?


person Lulink    schedule 13.12.2019    source источник
comment
Я бы не стал вызывать функцию exit, так как есть встроенная функция с уже таким именем...   -  person aschipfl    schedule 13.12.2019


Ответы (1)


Оказывается, проблема заключалась в том, что основная часть моего скрипта Python находилась в этом предложении try:

try:
    #All of my code
except SystemExit:
    ()
except Exception as ex:
    fun.log.error('ERROR: Unknown exception: ' + repr(ex))  

Я изначально добавил

except SystemExit:
    () 

потому что я думал, что отображение SystemExit в качестве «исключения» в консоли было проблемой, но это не так.
Короче говоря, решение состояло в том, чтобы удалить этот except. имя подразумевает, не позволяет отправить его в пакет, который затем считает, что код ошибки не был отправлен.

Удивительно для меня, except Exception as ex: не улавливает systemExit, сделанное sys.exit(). В моем случае это здорово, так как мне все еще нужно регистрировать неизвестные исключения.

person Lulink    schedule 13.12.2019