Если вы просто хотите запустить исполняемый файл и дождаться результатов, решение Anurag, вероятно, будет лучшим. Мне нужно было ответить на каждую строку вывода по мере ее поступления, и обнаружил, что работает следующее:
1) Создайте объект с помощью метода записи (текста). Перенаправьте на него стандартный вывод (sys.stdout = obj). В вашем методе записи работайте с выводом по мере его поступления.
2) Запустите метод в отдельном потоке с помощью следующего кода:
p = subprocess.Popen('Text/to/execute with-arg', stdout=subprocess.PIPE,
stderr=subprocess.PIPE, shell=False)
while p.poll() is None:
print p.stdout.readline().strip()
Поскольку вы перенаправили стандартный вывод, PIPE построчно отправит вывод вашему методу записи. Если вы не уверены, что получите разрывы строк, я считаю, что чтение (количество) тоже работает.
3) Не забудьте перенаправить стандартный вывод обратно по умолчанию: sys.stdout = __sys.stdout__