saída ao vivo do comando de subprocesso

Eu estou usando um script python como um driver para um código de hidrodinâmica. Quando chega a hora de executar a simulação, eu usosubprocess.Popen para executar o código, coletar a saída de stdout e stderr em umsubprocess.PIPE --- então eu posso imprimir (e salvar em um arquivo de log) as informações de saída e verificar se há algum erro. O problema é que não tenho ideia de como o código está progredindo. Se eu rodá-lo diretamente da linha de comando, ele me dá uma saída sobre qual iteração é, a que horas, qual é o próximo passo de tempo, etc.

Existe uma maneira de armazenar a saída (para registro e verificação de erros) e também produzir uma saída de streaming ao vivo?

A seção relevante do meu código:

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)

Originalmente eu estava canalizandorun_command atravéstee de modo que uma cópia foi diretamente para o arquivo de log, e o fluxo ainda sai diretamente para o terminal - mas dessa forma eu não posso armazenar erros (para meu conhecimento).

Editar:

Solução temporária:

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

então, em outro terminal, corratail -f log.txt (s.t.log_file = 'log.txt').

questionAnswers(13)

yourAnswerToTheQuestion