Подпроцесс программы разрыва труб - PullRequest
0 голосов
/ 15 мая 2019

Я автоматизирую приложение с графическим интерфейсом, которое также имеет 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.

Как конвейерный вывод может сломать программу?

Ответы [ 2 ]

0 голосов
/ 15 мая 2019

Таким образом, ответ был также перенаправить stdin=subprocess.PIPE, хотя theApplication не читает из него.

0 голосов
/ 15 мая 2019

Вы уже пробовали это с параметром списка? Как:

import subprocess
process = subprocess.Popen(["theApplication.exe", "-foo=7"], stdout=subprocess.PIPE) 
...