Hej, piszę program testujący aplikacje c++, na podstawie danych wejściowych i odpowiadających danych wyjściowych. Problem polega na tym że nie mogę w żaden sposób przechwycić błędów rzucanych przez plik .exe aplikacji C++.
Dla testów napisałem prosty kod w C++:
#include <iostream>
int main()
{
throw std::out_of_range("");
}
Próbując uruchamiać testy za pomocą aplikacji w Pythonie, wyskakuje mi okno:

Chciałbym żeby tego typu okna nie wyświetlały się podczas testów i żebym wiedział jakie błędy wystąpiły podczas runtime aplikacji C++.
Kod w Pythonie który uruchamia .exe C++:
@staticmethod
def __suppressWindowsErrorDialogs():
SEM_FAILCRITICALERRORS: hex = 0x0001
SEM_NOGPFAULTERRORBOX: hex = 0x0002
SEM_NOALIGNMENTFAULTEXCEPT: hex = 0x0004
SEM_NOOPENFILEERRORBOX: hex = 0x8000
# SetErrorMode function suppresses system error dialogs
ctypes.windll.kernel32.SetErrorMode(
SEM_FAILCRITICALERRORS |
SEM_NOGPFAULTERRORBOX |
SEM_NOALIGNMENTFAULTEXCEPT |
SEM_NOOPENFILEERRORBOX
)
def __getProgramOutput(self, data: str, timeout: float = 30) -> str | Tuple[int, str]:
try:
self.__suppressWindowsErrorDialogs()
startupinfo = subprocess.STARTUPINFO()
startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
creationflags = subprocess.CREATE_NO_WINDOW
process: subprocess.Popen = subprocess.Popen([self.__exe_path],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
stdin=subprocess.PIPE,
text=True,
startupinfo=startupinfo,
creationflags=creationflags)
out: str
err: str
out, err = process.communicate(input=data, timeout=timeout)
print(out)
print(err)
except PermissionError as e:
return PERMISSION_DENIED, e.filename
except subprocess.TimeoutExpired as e:
return f'TIMEOUT {e}'
except subprocess.CalledProcessError as e:
return f'{e.returncode}, {e.output}'
input()
# return result.stdout