wyjście na żywo z polecenia subprocess

Używam skryptu Pythona jako sterownika kodu hydrodynamicznego. Kiedy przychodzi czas na uruchomienie symulacji, używamsubprocess.Popen aby uruchomić kod, zbierz dane wyjściowe z stdout i stderr do asubprocess.PIPE --- wtedy mogę wydrukować (i zapisać do pliku dziennika) informacje wyjściowe i sprawdzić, czy nie ma błędów. Problem polega na tym, że nie mam pojęcia, jak postępuje kod. Jeśli uruchomię go bezpośrednio z wiersza poleceń, daje mi dane wyjściowe o tym, jaka jest jego iteracja, o której godzinie, jaki jest następny krok czasu itd.

Czy istnieje sposób zarówno na zapisanie danych wyjściowych (do rejestrowania i sprawdzania błędów), jak i na wyjście strumieniowe na żywo?

Odpowiednia sekcja mojego kodu:

ret_val = subprocess.Popen( run_command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True )
output, errors = ret_val.communicate()
log_file.write(output)
print output
if( ret_val.returncode ):
    print "RUN failed\n\n%s\n\n" % (errors)
    success = False

if( errors ): log_file.write("\n\n%s\n\n" % errors)

Oryginalnie byłam w rurociągurun_command przeztee tak, żeby kopia trafiła bezpośrednio do pliku dziennika, a strumień nadal był wysyłany bezpośrednio do terminala - ale w ten sposób nie mogę przechowywać żadnych błędów (do mojej wiedzy).

Edytować:

Tymczasowe rozwiązanie:

ret_val = subprocess.Popen( run_command, stdout=log_file, stderr=subprocess.PIPE, shell=True )
while not ret_val.poll():
    log_file.flush()

następnie w innym terminalu uruchomtail -f log.txt (s.t.log_file = 'log.txt').

questionAnswers(13)

yourAnswerToTheQuestion