Я использую python script в качестве драйвера для кода гидродинамики. Когда придет время для запуска моделирования, я использую 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
, чтобы копия попала непосредственно в файл журнала, и поток все еще выводится непосредственно на терминал, но я не могу хранить никаких ошибок (до мои знания).
Edit:
Временное решение:
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'
).