Я пытаюсь получить код выхода из пакетного файла.Если быть более точным, у меня возникают проблемы с получением ОШИБКИ.
Я пытался использовать Popen, check_output, call, check_call:
out = os.system(BatchFilePath)
out, err = subprocess.Popen(BatchFilePath,stderr=subprocess.PIPE, shell=True).communicate()
out,err = subprocess.Popen(BatchFilePath, stderr=subprocess.PIPE).communicate()
out = subprocess.Popen(BatchFilePath, shell=True).stderr
out = os.system(BatchFilePath)
out = subprocess.check_call(BatchFilePath)
out = subprocess.call(BatchFilePath, shell=True)
out = subprocess.check_output(buildPath, shell=True)
, которые в большинстве случаев возвращают пустые или 0
Я также пытался использовать
SET ERRORLEVEL=1
exit /B !ERRORLEVEL!
, но без удачи.Я также пытался
set RC=
setlocal
somecommand.exe
endlocal & set RC=%ERRORLEVEL%
exit /B %RC%
Другой способ сделать это -
out, err = subprocess.Popen(BatchFilePath,stdout=subrocess.PIPE,stderr=subprocess.PIPE, shell=True).communicate()
и поиск строки "ERROR" или "FAILURE" из переменной out.
С другой стороны, таким образом, пользователь не увидит все эхо-сигналы из пакетного файла, поэтому экран будет пуст без каких-либо сообщений, пока пакетный файл не закончится, и напечатает соответствующее сообщение из моего сценария python.
Так что мне не нужно использовать параметр stdout = subrocess.PIPE из Popen, потому что он печатает все эхо из пакета.
Я работаю с CMD, а не PowerShell.и я использую Python 2.7
Я искал в Google и здесь, и я не смог найти ничего, что мне поможет.Любая помощь будет признательна.