Я автоматизирую приложение с графическим интерфейсом, которое также имеет CLI.Я могу успешно запустить следующее (приложение - приложение, разработанное внутри компании):
import subprocess
process = subprocess.Popen(r'theApplication.exe -foo=7')
Затем оно печатает свой вывод, который я хочу обработать, поэтому я использую подпроцесс. PIPE
import subprocess
process = subprocess.Popen(r'theApplication.exe -foo=7', stdout=subprocess.PIPE)
Теперь программа не запускается и Windows сообщает, что theApplication has stopped working
.То же самое происходит, если стандартный вывод перенаправлен в DEVNULL или файл.Я попытался установить bufsize
в 0 и 1. То же самое происходит.
Попробовал все перестановки с перенаправлением stdout
и stderr
или нет.Это работает, только если ни один из них не перенаправлен.Если кто-то перенаправлен, это немедленно ломает программу.Значение process.returncode
равно None
.
Как конвейерный вывод может сломать программу?