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

Программы на Python
Ответить
Anonymous
 Живой вывод из команды подпроцесса

Сообщение Anonymous »

Я использую скрипт Python в качестве драйвера для кода гидродинамики. Когда приходит время запуска моделирования, я использую subprocess.Popen для запуска кода, собираю выходные данные из stdout и stderr в подпроцесс.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').

Подробнее здесь: https://stackoverflow.com/questions/184 ... ss-command
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»