вопрос
Учитывая подпроцесс, запущенный в python с кодом, подобным:
import subprocess
p = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
p.communicate()
print('Return code: {}'.format(p.returncode))
Согласно официальной документации , можно проверить, был ли подпроцесс завершен сигналом:
Отрицательное значение -N указывает, что дочерний процесс был прерван сигналом N (только POSIX).
Но только на платформах POSIX.
Есть ли способ проверить, не завершился ли процесс сигналом (не важно, какой) на платформах Windows?
Фон
Я сталкиваюсь с этой проблемой при выполнении тестов googletest. Тест флага CLI об отказе при сбое не проходит на платформах Windows (VC14, VS2017), но хорошо работает на POSIX (2 Ubuntu, 2 MacOS).
Вручную в командной строке я получаю следующие результаты:
> .\googletest-break-on-failure-unittest_.exe --gtest_break_on_failure
[==========] Running 1 test from 1 test case.
[----------] Global test environment set-up.
[----------] 1 test from Foo
[ RUN ] Foo.Bar
<some path>\googletest\test\googletest-break-on-failure-unittest_.cc(52): error: Expected equality of these values:
2
3
> echo %ERRORLEVEL%
-2147483645
Однако оболочка Python, которая вызывает этот тест, получает 2147483651
(положительное число).
(я только что добавил печать до этой строки )
Обратите внимание, что они относятся к числам 0xFFFFFFFF80000003
(отрицательное число) и 0x80000003
(положительное число) в шестнадцатеричном формате и что код возврата больше не обрабатывался. (См. здесь )
Почему код возврата будет изменен следующим образом?
PS: Да, я проверил, что GTEST_OS_WINDOWS
и GTEST_HAS_SEH
истинны в коде C ++.