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



я использую скрипт 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 failednn%snn" % (errors)
success = False

if( errors ): log_file.write("nn%snn" % 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').

692   0  

Comments

    Ничего не найдено.