оперативный вывод команды подпроцесса

Я использую скрипт Python в качестве драйвера для гидродинамического кода. Когда приходит время запустить симуляцию, я используюsubprocess.Popen чтобы запустить код, соберите выходные данные из stdout и stderr вsubprocess.PIPE --- тогда я могу распечатать (и сохранить в лог-файл) выходную информацию и проверить на наличие ошибок. Проблема в том, что я понятия не имею, как продвигается код. Если я запускаю его непосредственно из командной строки, он дает мне вывод о том, в какой итерации он находится, во сколько, каков следующий шаг времени и т. Д.

Есть ли способ как сохранить выходные данные (для ведения журнала и проверки ошибок), так и создать прямой вывод?

Соответствующий раздел моего кода:

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)

Первоначально я обжигалаrun_command черезtee так что копия отправлялась прямо в лог-файл, а поток все еще выводился прямо на терминал - но таким образом я не могу хранить никаких ошибок (насколько мне известно).

Редактировать:

Временное решение:

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

затем в другом терминале запуститеtail -f log.txt (S.T.log_file = 'log.txt').

Ответы на вопрос(13)

Ваш ответ на вопрос