На самом деле вам не нужно захватывать его стандартный вывод, просто попросите дочернюю программу распечатать его содержимое и выйти, вместо того, чтобы передавать вывод в вашу родительскую программу и распечатывать его там. Если вам нужен переменный вывод, просто используйте функцию.
Но в любом случае, это не то, что вы спросили.
Я на самом деле получил это из другого вопроса stackoverflow:
import subprocess, sys
cmd='testfile.py'
p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stdin=subprocess.PIPE)
while True:
out = p.stdout.read(20)
if out == '' and p.poll() != None:
break
if out != '':
sys.stdout.write(out)
sys.stdout.flush()
Во-первых, он открывает ваш процесс: затем он постоянно читает вывод из p
и печатает его на экране, используя sys.stdout.write
. Часть, которая заставляет все это работать, - sys.stdout.flush()
, которая будет постоянно «очищать» вывод программы.